{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# ResnetTrick_s192bs32_e200\n",
    "\n",
    "> size 192 bs 32 200 epochs runs."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# setup and imports"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# pip install git+https://github.com/ayasyrev/model_constructor"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# pip install git+https://github.com/kornia/kornia"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from kornia.contrib import MaxBlurPool2d"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from fastai.basic_train import *\n",
    "from fastai.vision import *\n",
    "from fastai.script import *\n",
    "from model_constructor.net import *\n",
    "from model_constructor.layers import SimpleSelfAttention, ConvLayer"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "\n",
    "import math\n",
    "import torch\n",
    "from torch.optim.optimizer import Optimizer, required\n",
    "import itertools as it"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# utils"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "class Mish(nn.Module):\n",
    "    def __init__(self):\n",
    "        super().__init__()\n",
    "        print(\"Mish activation loaded...\")\n",
    "\n",
    "    def forward(self, x):  \n",
    "        #save 1 second per epoch with no x= x*() and then return x...just inline it.\n",
    "        return x *( torch.tanh(F.softplus(x))) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#Ranger deep learning optimizer - RAdam + Lookahead combined.\n",
    "  #https://github.com/lessw2020/Ranger-Deep-Learning-Optimizer\n",
    "\n",
    "  #Ranger has now been used to capture 12 records on the FastAI leaderboard.\n",
    "\n",
    "  #This version = 9.3.19  \n",
    "\n",
    "  #Credits:\n",
    "  #RAdam -->  https://github.com/LiyuanLucasLiu/RAdam\n",
    "  #Lookahead --> rewritten by lessw2020, but big thanks to Github @LonePatient and @RWightman for ideas from their code.\n",
    "  #Lookahead paper --> MZhang,G Hinton  https://arxiv.org/abs/1907.08610\n",
    "\n",
    "  #summary of changes: \n",
    "  #full code integration with all updates at param level instead of group, moves slow weights into state dict (from generic weights), \n",
    "  #supports group learning rates (thanks @SHolderbach), fixes sporadic load from saved model issues.\n",
    "  #changes 8/31/19 - fix references to *self*.N_sma_threshold; \n",
    "                  #changed eps to 1e-5 as better default than 1e-8.\n",
    "\n",
    "class Ranger(Optimizer):\n",
    "\n",
    "    def __init__(self, params, lr=1e-3, alpha=0.5, k=6, N_sma_threshhold=5, betas=(.95,0.999), eps=1e-5, weight_decay=0):\n",
    "        #parameter checks\n",
    "        if not 0.0 <= alpha <= 1.0:\n",
    "            raise ValueError(f'Invalid slow update rate: {alpha}')\n",
    "        if not 1 <= k:\n",
    "            raise ValueError(f'Invalid lookahead steps: {k}')\n",
    "        if not lr > 0:\n",
    "            raise ValueError(f'Invalid Learning Rate: {lr}')\n",
    "        if not eps > 0:\n",
    "            raise ValueError(f'Invalid eps: {eps}')\n",
    "\n",
    "        #parameter comments:\n",
    "        # beta1 (momentum) of .95 seems to work better than .90...\n",
    "        #N_sma_threshold of 5 seems better in testing than 4.\n",
    "        #In both cases, worth testing on your dataset (.90 vs .95, 4 vs 5) to make sure which works best for you.\n",
    "\n",
    "        #prep defaults and init torch.optim base\n",
    "        defaults = dict(lr=lr, alpha=alpha, k=k, step_counter=0, betas=betas, N_sma_threshhold=N_sma_threshhold, eps=eps, weight_decay=weight_decay)\n",
    "        super().__init__(params,defaults)\n",
    "\n",
    "        #adjustable threshold\n",
    "        self.N_sma_threshhold = N_sma_threshhold\n",
    "\n",
    "        #now we can get to work...\n",
    "        #removed as we now use step from RAdam...no need for duplicate step counting\n",
    "        #for group in self.param_groups:\n",
    "        #    group[\"step_counter\"] = 0\n",
    "            #print(\"group step counter init\")\n",
    "\n",
    "        #look ahead params\n",
    "        self.alpha = alpha\n",
    "        self.k = k \n",
    "\n",
    "        #radam buffer for state\n",
    "        self.radam_buffer = [[None,None,None] for ind in range(10)]\n",
    "\n",
    "        #self.first_run_check=0\n",
    "\n",
    "        #lookahead weights\n",
    "        #9/2/19 - lookahead param tensors have been moved to state storage.  \n",
    "        #This should resolve issues with load/save where weights were left in GPU memory from first load, slowing down future runs.\n",
    "\n",
    "        #self.slow_weights = [[p.clone().detach() for p in group['params']]\n",
    "        #                     for group in self.param_groups]\n",
    "\n",
    "        #don't use grad for lookahead weights\n",
    "        #for w in it.chain(*self.slow_weights):\n",
    "        #    w.requires_grad = False\n",
    "\n",
    "    def __setstate__(self, state):\n",
    "        print(\"set state called\")\n",
    "        super(Ranger, self).__setstate__(state)\n",
    "\n",
    "\n",
    "    def step(self, closure=None):\n",
    "        loss = None\n",
    "        #note - below is commented out b/c I have other work that passes back the loss as a float, and thus not a callable closure.  \n",
    "        #Uncomment if you need to use the actual closure...\n",
    "\n",
    "        #if closure is not None:\n",
    "            #loss = closure()\n",
    "\n",
    "        #Evaluate averages and grad, update param tensors\n",
    "        for group in self.param_groups:\n",
    "\n",
    "            for p in group['params']:\n",
    "                if p.grad is None:\n",
    "                    continue\n",
    "                grad = p.grad.data.float()\n",
    "                if grad.is_sparse:\n",
    "                    raise RuntimeError('Ranger optimizer does not support sparse gradients')\n",
    "\n",
    "                p_data_fp32 = p.data.float()\n",
    "\n",
    "                state = self.state[p]  #get state dict for this param\n",
    "\n",
    "                if len(state) == 0:   #if first time to run...init dictionary with our desired entries\n",
    "                    #if self.first_run_check==0:\n",
    "                        #self.first_run_check=1\n",
    "                        #print(\"Initializing slow buffer...should not see this at load from saved model!\")\n",
    "                    state['step'] = 0\n",
    "                    state['exp_avg'] = torch.zeros_like(p_data_fp32)\n",
    "                    state['exp_avg_sq'] = torch.zeros_like(p_data_fp32)\n",
    "\n",
    "                    #look ahead weight storage now in state dict \n",
    "                    state['slow_buffer'] = torch.empty_like(p.data)\n",
    "                    state['slow_buffer'].copy_(p.data)\n",
    "\n",
    "                else:\n",
    "                    state['exp_avg'] = state['exp_avg'].type_as(p_data_fp32)\n",
    "                    state['exp_avg_sq'] = state['exp_avg_sq'].type_as(p_data_fp32)\n",
    "\n",
    "                #begin computations \n",
    "                exp_avg, exp_avg_sq = state['exp_avg'], state['exp_avg_sq']\n",
    "                beta1, beta2 = group['betas']\n",
    "\n",
    "                #compute variance mov avg\n",
    "                exp_avg_sq.mul_(beta2).addcmul_(1 - beta2, grad, grad)\n",
    "                #compute mean moving avg\n",
    "                exp_avg.mul_(beta1).add_(1 - beta1, grad)\n",
    "\n",
    "                state['step'] += 1\n",
    "\n",
    "\n",
    "                buffered = self.radam_buffer[int(state['step'] % 10)]\n",
    "                if state['step'] == buffered[0]:\n",
    "                    N_sma, step_size = buffered[1], buffered[2]\n",
    "                else:\n",
    "                    buffered[0] = state['step']\n",
    "                    beta2_t = beta2 ** state['step']\n",
    "                    N_sma_max = 2 / (1 - beta2) - 1\n",
    "                    N_sma = N_sma_max - 2 * state['step'] * beta2_t / (1 - beta2_t)\n",
    "                    buffered[1] = N_sma\n",
    "                    if N_sma > self.N_sma_threshhold:\n",
    "                        step_size = math.sqrt((1 - beta2_t) * (N_sma - 4) / (N_sma_max - 4) * (N_sma - 2) / N_sma * N_sma_max / (N_sma_max - 2)) / (1 - beta1 ** state['step'])\n",
    "                    else:\n",
    "                        step_size = 1.0 / (1 - beta1 ** state['step'])\n",
    "                    buffered[2] = step_size\n",
    "\n",
    "                if group['weight_decay'] != 0:\n",
    "                    p_data_fp32.add_(-group['weight_decay'] * group['lr'], p_data_fp32)\n",
    "\n",
    "                if N_sma > self.N_sma_threshhold:\n",
    "                    denom = exp_avg_sq.sqrt().add_(group['eps'])\n",
    "                    p_data_fp32.addcdiv_(-step_size * group['lr'], exp_avg, denom)\n",
    "                else:\n",
    "                    p_data_fp32.add_(-step_size * group['lr'], exp_avg)\n",
    "\n",
    "                p.data.copy_(p_data_fp32)\n",
    "\n",
    "                #integrated look ahead...\n",
    "                #we do it at the param level instead of group level\n",
    "                if state['step'] % group['k'] == 0:\n",
    "                    slow_p = state['slow_buffer'] #get access to slow param tensor\n",
    "                    slow_p.add_(self.alpha, p.data - slow_p)  #(fast weights - slow weights) * alpha\n",
    "                    p.data.copy_(slow_p)  #copy interpolated weights to RAdam param tensor\n",
    "\n",
    "        return loss"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "def get_data(size=128, woof=1, bs=64, workers=None, **kwargs):\n",
    "    if woof:\n",
    "        path = URLs.IMAGEWOOF    # if woof \n",
    "    else:\n",
    "        path = URLs.IMAGENETTE\n",
    "    path = untar_data(path)\n",
    "    print('data path  ', path)\n",
    "    n_gpus = num_distrib() or 1\n",
    "    if workers is None: workers = min(8, num_cpus()//n_gpus)\n",
    "    return (ImageList.from_folder(path).split_by_folder(valid='val')\n",
    "            .label_from_folder().transform(([flip_lr(p=0.5)], []), size=size)\n",
    "            .databunch(bs=bs, num_workers=workers)\n",
    "            .presize(size, scale=(0.35,1))\n",
    "            .normalize(imagenet_stats))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "def get_learn(\n",
    "        gpu:Param(\"GPU to run on\", str)=None,\n",
    "        woof: Param(\"Use imagewoof (otherwise imagenette)\", int)=1,\n",
    "        size: Param(\"Size (px: 128,192,224)\", int)=128,\n",
    "        alpha: Param(\"Alpha\", float)=0.99, \n",
    "        mom: Param(\"Momentum\", float)=0.95, #? 0.9\n",
    "        eps: Param(\"epsilon\", float)=1e-6,\n",
    "        bs: Param(\"Batch size\", int)=64,\n",
    "        mixup: Param(\"Mixup\", float)=0.,\n",
    "        opt: Param(\"Optimizer (adam,rms,sgd)\", str)='ranger',\n",
    "        sa: Param(\"Self-attention\", int)=0,\n",
    "        sym: Param(\"Symmetry for self-attention\", int)=0,\n",
    "        model: Param('model as partial', callable) = xresnet50\n",
    "        ):\n",
    " \n",
    "    if   opt=='adam' : opt_func = partial(optim.Adam, betas=(mom,alpha), eps=eps)\n",
    "    elif opt=='ranger'  : opt_func = partial(Ranger,  betas=(mom,alpha), eps=eps)\n",
    "    data = get_data(size, woof, bs)\n",
    "    learn = (Learner(data, model(), wd=1e-2, opt_func=opt_func,\n",
    "             metrics=[accuracy,top_k_accuracy],\n",
    "             bn_wd=False, true_wd=True,\n",
    "             loss_func = LabelSmoothingCrossEntropy(),))\n",
    "    print('Learn path', learn.path)\n",
    "    if mixup: learn = learn.mixup(alpha=mixup)\n",
    "    return learn"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# ResBlock"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "class NewResBlock(Module):\n",
    "    def __init__(self, expansion, ni, nh, stride=1, \n",
    "                 conv_layer=ConvLayer, act_fn=act_fn,\n",
    "#                  pool=nn.AvgPool2d(2, ceil_mode=True), sa=False,sym=False):\n",
    "                 pool=nn.AvgPool2d(2, ceil_mode=True), sa=False,sym=False, zero_bn=True):\n",
    "        nf,ni = nh*expansion,ni*expansion\n",
    "        self.reduce = noop if stride==1 else pool\n",
    "        layers  = [(f\"conv_0\", conv_layer(ni, nh, 3, stride=stride, act_fn=act_fn)),\n",
    "                   (f\"conv_1\", conv_layer(nh, nf, 3, zero_bn=zero_bn, act=False))\n",
    "        ] if expansion == 1 else [\n",
    "                   (f\"conv_0\",conv_layer(ni, nh, 1, act_fn=act_fn)),\n",
    "                   (f\"conv_1\",conv_layer(nh, nh, 3, stride=1, act_fn=act_fn)), #!!!\n",
    "                   (f\"conv_2\",conv_layer(nh, nf, 1, zero_bn=zero_bn, act=False))\n",
    "        ]\n",
    "        if sa: layers.append(('sa', SimpleSelfAttention(nf,ks=1,sym=sym)))\n",
    "        self.convs = nn.Sequential(OrderedDict(layers))\n",
    "        self.idconv = noop if ni==nf else conv_layer(ni, nf, 1, act=False)\n",
    "        self.merge =act_fn\n",
    "\n",
    "    def forward(self, x): \n",
    "        o = self.reduce(x)\n",
    "        return self.merge(self.convs(o) + self.idconv(o))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Parameters"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "lr = 0.004\n",
    "epochs = 200\n",
    "moms = (0.95,0.95)\n",
    "start_pct = 0.2\n",
    "size=192\n",
    "bs=32"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Model Constructor"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "model = xresnet50(c_out=10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "model.block = NewResBlock"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "pool = MaxBlurPool2d(3, True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "model.pool = pool\n",
    "model.stem_pool = pool"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Mish activation loaded...\n"
     ]
    }
   ],
   "source": [
    "# model.stem_sizes = [3,32,32,64]\n",
    "model.stem_sizes = [3,32,64,64]\n",
    "\n",
    "model.act_fn= Mish()\n",
    "model.sa = True"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## repr model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Sequential(\n",
       "  model xresnet50\n",
       "  (stem): Sequential(\n",
       "    (conv_0): ConvLayer(\n",
       "      (conv): Conv2d(3, 32, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
       "      (bn): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "      (act_fn): Mish()\n",
       "    )\n",
       "    (conv_1): ConvLayer(\n",
       "      (conv): Conv2d(32, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "      (bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "      (act_fn): Mish()\n",
       "    )\n",
       "    (conv_2): ConvLayer(\n",
       "      (conv): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "      (bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "      (act_fn): Mish()\n",
       "    )\n",
       "    (stem_pool): MaxBlurPool2d()\n",
       "  )\n",
       "  (body): Sequential(\n",
       "    (l_0): Sequential(\n",
       "      (bl_0): NewResBlock(\n",
       "        (convs): Sequential(\n",
       "          (conv_0): ConvLayer(\n",
       "            (conv): Conv2d(64, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "            (bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "            (act_fn): Mish()\n",
       "          )\n",
       "          (conv_1): ConvLayer(\n",
       "            (conv): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "            (bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "            (act_fn): Mish()\n",
       "          )\n",
       "          (conv_2): ConvLayer(\n",
       "            (conv): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "            (bn): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "          )\n",
       "        )\n",
       "        (idconv): ConvLayer(\n",
       "          (conv): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "          (bn): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        )\n",
       "        (merge): Mish()\n",
       "      )\n",
       "      (bl_1): NewResBlock(\n",
       "        (convs): Sequential(\n",
       "          (conv_0): ConvLayer(\n",
       "            (conv): Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "            (bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "            (act_fn): Mish()\n",
       "          )\n",
       "          (conv_1): ConvLayer(\n",
       "            (conv): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "            (bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "            (act_fn): Mish()\n",
       "          )\n",
       "          (conv_2): ConvLayer(\n",
       "            (conv): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "            (bn): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "          )\n",
       "        )\n",
       "        (merge): Mish()\n",
       "      )\n",
       "      (bl_2): NewResBlock(\n",
       "        (convs): Sequential(\n",
       "          (conv_0): ConvLayer(\n",
       "            (conv): Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "            (bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "            (act_fn): Mish()\n",
       "          )\n",
       "          (conv_1): ConvLayer(\n",
       "            (conv): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "            (bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "            (act_fn): Mish()\n",
       "          )\n",
       "          (conv_2): ConvLayer(\n",
       "            (conv): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "            (bn): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "          )\n",
       "          (sa): SimpleSelfAttention(\n",
       "            (conv): Conv1d(256, 256, kernel_size=(1,), stride=(1,), bias=False)\n",
       "          )\n",
       "        )\n",
       "        (merge): Mish()\n",
       "      )\n",
       "    )\n",
       "    (l_1): Sequential(\n",
       "      (bl_0): NewResBlock(\n",
       "        (reduce): MaxBlurPool2d()\n",
       "        (convs): Sequential(\n",
       "          (conv_0): ConvLayer(\n",
       "            (conv): Conv2d(256, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "            (bn): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "            (act_fn): Mish()\n",
       "          )\n",
       "          (conv_1): ConvLayer(\n",
       "            (conv): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "            (bn): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "            (act_fn): Mish()\n",
       "          )\n",
       "          (conv_2): ConvLayer(\n",
       "            (conv): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "            (bn): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "          )\n",
       "        )\n",
       "        (idconv): ConvLayer(\n",
       "          (conv): Conv2d(256, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "          (bn): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        )\n",
       "        (merge): Mish()\n",
       "      )\n",
       "      (bl_1): NewResBlock(\n",
       "        (convs): Sequential(\n",
       "          (conv_0): ConvLayer(\n",
       "            (conv): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "            (bn): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "            (act_fn): Mish()\n",
       "          )\n",
       "          (conv_1): ConvLayer(\n",
       "            (conv): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "            (bn): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "            (act_fn): Mish()\n",
       "          )\n",
       "          (conv_2): ConvLayer(\n",
       "            (conv): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "            (bn): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "          )\n",
       "        )\n",
       "        (merge): Mish()\n",
       "      )\n",
       "      (bl_2): NewResBlock(\n",
       "        (convs): Sequential(\n",
       "          (conv_0): ConvLayer(\n",
       "            (conv): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "            (bn): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "            (act_fn): Mish()\n",
       "          )\n",
       "          (conv_1): ConvLayer(\n",
       "            (conv): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "            (bn): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "            (act_fn): Mish()\n",
       "          )\n",
       "          (conv_2): ConvLayer(\n",
       "            (conv): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "            (bn): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "          )\n",
       "        )\n",
       "        (merge): Mish()\n",
       "      )\n",
       "      (bl_3): NewResBlock(\n",
       "        (convs): Sequential(\n",
       "          (conv_0): ConvLayer(\n",
       "            (conv): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "            (bn): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "            (act_fn): Mish()\n",
       "          )\n",
       "          (conv_1): ConvLayer(\n",
       "            (conv): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "            (bn): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "            (act_fn): Mish()\n",
       "          )\n",
       "          (conv_2): ConvLayer(\n",
       "            (conv): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "            (bn): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "          )\n",
       "        )\n",
       "        (merge): Mish()\n",
       "      )\n",
       "    )\n",
       "    (l_2): Sequential(\n",
       "      (bl_0): NewResBlock(\n",
       "        (reduce): MaxBlurPool2d()\n",
       "        (convs): Sequential(\n",
       "          (conv_0): ConvLayer(\n",
       "            (conv): Conv2d(512, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "            (bn): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "            (act_fn): Mish()\n",
       "          )\n",
       "          (conv_1): ConvLayer(\n",
       "            (conv): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "            (bn): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "            (act_fn): Mish()\n",
       "          )\n",
       "          (conv_2): ConvLayer(\n",
       "            (conv): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "            (bn): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "          )\n",
       "        )\n",
       "        (idconv): ConvLayer(\n",
       "          (conv): Conv2d(512, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "          (bn): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        )\n",
       "        (merge): Mish()\n",
       "      )\n",
       "      (bl_1): NewResBlock(\n",
       "        (convs): Sequential(\n",
       "          (conv_0): ConvLayer(\n",
       "            (conv): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "            (bn): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "            (act_fn): Mish()\n",
       "          )\n",
       "          (conv_1): ConvLayer(\n",
       "            (conv): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "            (bn): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "            (act_fn): Mish()\n",
       "          )\n",
       "          (conv_2): ConvLayer(\n",
       "            (conv): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "            (bn): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "          )\n",
       "        )\n",
       "        (merge): Mish()\n",
       "      )\n",
       "      (bl_2): NewResBlock(\n",
       "        (convs): Sequential(\n",
       "          (conv_0): ConvLayer(\n",
       "            (conv): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "            (bn): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "            (act_fn): Mish()\n",
       "          )\n",
       "          (conv_1): ConvLayer(\n",
       "            (conv): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "            (bn): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "            (act_fn): Mish()\n",
       "          )\n",
       "          (conv_2): ConvLayer(\n",
       "            (conv): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "            (bn): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "          )\n",
       "        )\n",
       "        (merge): Mish()\n",
       "      )\n",
       "      (bl_3): NewResBlock(\n",
       "        (convs): Sequential(\n",
       "          (conv_0): ConvLayer(\n",
       "            (conv): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "            (bn): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "            (act_fn): Mish()\n",
       "          )\n",
       "          (conv_1): ConvLayer(\n",
       "            (conv): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "            (bn): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "            (act_fn): Mish()\n",
       "          )\n",
       "          (conv_2): ConvLayer(\n",
       "            (conv): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "            (bn): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "          )\n",
       "        )\n",
       "        (merge): Mish()\n",
       "      )\n",
       "      (bl_4): NewResBlock(\n",
       "        (convs): Sequential(\n",
       "          (conv_0): ConvLayer(\n",
       "            (conv): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "            (bn): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "            (act_fn): Mish()\n",
       "          )\n",
       "          (conv_1): ConvLayer(\n",
       "            (conv): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "            (bn): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "            (act_fn): Mish()\n",
       "          )\n",
       "          (conv_2): ConvLayer(\n",
       "            (conv): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "            (bn): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "          )\n",
       "        )\n",
       "        (merge): Mish()\n",
       "      )\n",
       "      (bl_5): NewResBlock(\n",
       "        (convs): Sequential(\n",
       "          (conv_0): ConvLayer(\n",
       "            (conv): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "            (bn): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "            (act_fn): Mish()\n",
       "          )\n",
       "          (conv_1): ConvLayer(\n",
       "            (conv): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "            (bn): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "            (act_fn): Mish()\n",
       "          )\n",
       "          (conv_2): ConvLayer(\n",
       "            (conv): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "            (bn): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "          )\n",
       "        )\n",
       "        (merge): Mish()\n",
       "      )\n",
       "    )\n",
       "    (l_3): Sequential(\n",
       "      (bl_0): NewResBlock(\n",
       "        (reduce): MaxBlurPool2d()\n",
       "        (convs): Sequential(\n",
       "          (conv_0): ConvLayer(\n",
       "            (conv): Conv2d(1024, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "            (bn): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "            (act_fn): Mish()\n",
       "          )\n",
       "          (conv_1): ConvLayer(\n",
       "            (conv): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "            (bn): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "            (act_fn): Mish()\n",
       "          )\n",
       "          (conv_2): ConvLayer(\n",
       "            (conv): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "            (bn): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "          )\n",
       "        )\n",
       "        (idconv): ConvLayer(\n",
       "          (conv): Conv2d(1024, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "          (bn): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        )\n",
       "        (merge): Mish()\n",
       "      )\n",
       "      (bl_1): NewResBlock(\n",
       "        (convs): Sequential(\n",
       "          (conv_0): ConvLayer(\n",
       "            (conv): Conv2d(2048, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "            (bn): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "            (act_fn): Mish()\n",
       "          )\n",
       "          (conv_1): ConvLayer(\n",
       "            (conv): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "            (bn): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "            (act_fn): Mish()\n",
       "          )\n",
       "          (conv_2): ConvLayer(\n",
       "            (conv): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "            (bn): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "          )\n",
       "        )\n",
       "        (merge): Mish()\n",
       "      )\n",
       "      (bl_2): NewResBlock(\n",
       "        (convs): Sequential(\n",
       "          (conv_0): ConvLayer(\n",
       "            (conv): Conv2d(2048, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "            (bn): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "            (act_fn): Mish()\n",
       "          )\n",
       "          (conv_1): ConvLayer(\n",
       "            (conv): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "            (bn): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "            (act_fn): Mish()\n",
       "          )\n",
       "          (conv_2): ConvLayer(\n",
       "            (conv): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "            (bn): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "          )\n",
       "        )\n",
       "        (merge): Mish()\n",
       "      )\n",
       "    )\n",
       "  )\n",
       "  (head): Sequential(\n",
       "    (pool): AdaptiveAvgPool2d(output_size=1)\n",
       "    (flat): Flatten()\n",
       "    (fc): Linear(in_features=2048, out_features=10, bias=True)\n",
       "  )\n",
       ")"
      ]
     },
     "execution_count": null,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Sequential(\n",
       "  (conv_0): ConvLayer(\n",
       "    (conv): Conv2d(3, 32, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
       "    (bn): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "    (act_fn): Mish()\n",
       "  )\n",
       "  (conv_1): ConvLayer(\n",
       "    (conv): Conv2d(32, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "    (bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "    (act_fn): Mish()\n",
       "  )\n",
       "  (conv_2): ConvLayer(\n",
       "    (conv): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "    (bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "    (act_fn): Mish()\n",
       "  )\n",
       "  (stem_pool): MaxBlurPool2d()\n",
       ")"
      ]
     },
     "execution_count": null,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model.stem"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Sequential(\n",
       "  (l_0): Sequential(\n",
       "    (bl_0): NewResBlock(\n",
       "      (convs): Sequential(\n",
       "        (conv_0): ConvLayer(\n",
       "          (conv): Conv2d(64, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "          (bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "          (act_fn): Mish()\n",
       "        )\n",
       "        (conv_1): ConvLayer(\n",
       "          (conv): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "          (bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "          (act_fn): Mish()\n",
       "        )\n",
       "        (conv_2): ConvLayer(\n",
       "          (conv): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "          (bn): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        )\n",
       "      )\n",
       "      (idconv): ConvLayer(\n",
       "        (conv): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "      )\n",
       "      (merge): Mish()\n",
       "    )\n",
       "    (bl_1): NewResBlock(\n",
       "      (convs): Sequential(\n",
       "        (conv_0): ConvLayer(\n",
       "          (conv): Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "          (bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "          (act_fn): Mish()\n",
       "        )\n",
       "        (conv_1): ConvLayer(\n",
       "          (conv): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "          (bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "          (act_fn): Mish()\n",
       "        )\n",
       "        (conv_2): ConvLayer(\n",
       "          (conv): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "          (bn): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        )\n",
       "      )\n",
       "      (merge): Mish()\n",
       "    )\n",
       "    (bl_2): NewResBlock(\n",
       "      (convs): Sequential(\n",
       "        (conv_0): ConvLayer(\n",
       "          (conv): Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "          (bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "          (act_fn): Mish()\n",
       "        )\n",
       "        (conv_1): ConvLayer(\n",
       "          (conv): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "          (bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "          (act_fn): Mish()\n",
       "        )\n",
       "        (conv_2): ConvLayer(\n",
       "          (conv): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "          (bn): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        )\n",
       "        (sa): SimpleSelfAttention(\n",
       "          (conv): Conv1d(256, 256, kernel_size=(1,), stride=(1,), bias=False)\n",
       "        )\n",
       "      )\n",
       "      (merge): Mish()\n",
       "    )\n",
       "  )\n",
       "  (l_1): Sequential(\n",
       "    (bl_0): NewResBlock(\n",
       "      (reduce): MaxBlurPool2d()\n",
       "      (convs): Sequential(\n",
       "        (conv_0): ConvLayer(\n",
       "          (conv): Conv2d(256, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "          (bn): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "          (act_fn): Mish()\n",
       "        )\n",
       "        (conv_1): ConvLayer(\n",
       "          (conv): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "          (bn): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "          (act_fn): Mish()\n",
       "        )\n",
       "        (conv_2): ConvLayer(\n",
       "          (conv): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "          (bn): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        )\n",
       "      )\n",
       "      (idconv): ConvLayer(\n",
       "        (conv): Conv2d(256, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "      )\n",
       "      (merge): Mish()\n",
       "    )\n",
       "    (bl_1): NewResBlock(\n",
       "      (convs): Sequential(\n",
       "        (conv_0): ConvLayer(\n",
       "          (conv): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "          (bn): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "          (act_fn): Mish()\n",
       "        )\n",
       "        (conv_1): ConvLayer(\n",
       "          (conv): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "          (bn): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "          (act_fn): Mish()\n",
       "        )\n",
       "        (conv_2): ConvLayer(\n",
       "          (conv): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "          (bn): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        )\n",
       "      )\n",
       "      (merge): Mish()\n",
       "    )\n",
       "    (bl_2): NewResBlock(\n",
       "      (convs): Sequential(\n",
       "        (conv_0): ConvLayer(\n",
       "          (conv): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "          (bn): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "          (act_fn): Mish()\n",
       "        )\n",
       "        (conv_1): ConvLayer(\n",
       "          (conv): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "          (bn): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "          (act_fn): Mish()\n",
       "        )\n",
       "        (conv_2): ConvLayer(\n",
       "          (conv): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "          (bn): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        )\n",
       "      )\n",
       "      (merge): Mish()\n",
       "    )\n",
       "    (bl_3): NewResBlock(\n",
       "      (convs): Sequential(\n",
       "        (conv_0): ConvLayer(\n",
       "          (conv): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "          (bn): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "          (act_fn): Mish()\n",
       "        )\n",
       "        (conv_1): ConvLayer(\n",
       "          (conv): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "          (bn): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "          (act_fn): Mish()\n",
       "        )\n",
       "        (conv_2): ConvLayer(\n",
       "          (conv): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "          (bn): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        )\n",
       "      )\n",
       "      (merge): Mish()\n",
       "    )\n",
       "  )\n",
       "  (l_2): Sequential(\n",
       "    (bl_0): NewResBlock(\n",
       "      (reduce): MaxBlurPool2d()\n",
       "      (convs): Sequential(\n",
       "        (conv_0): ConvLayer(\n",
       "          (conv): Conv2d(512, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "          (bn): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "          (act_fn): Mish()\n",
       "        )\n",
       "        (conv_1): ConvLayer(\n",
       "          (conv): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "          (bn): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "          (act_fn): Mish()\n",
       "        )\n",
       "        (conv_2): ConvLayer(\n",
       "          (conv): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "          (bn): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        )\n",
       "      )\n",
       "      (idconv): ConvLayer(\n",
       "        (conv): Conv2d(512, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "      )\n",
       "      (merge): Mish()\n",
       "    )\n",
       "    (bl_1): NewResBlock(\n",
       "      (convs): Sequential(\n",
       "        (conv_0): ConvLayer(\n",
       "          (conv): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "          (bn): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "          (act_fn): Mish()\n",
       "        )\n",
       "        (conv_1): ConvLayer(\n",
       "          (conv): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "          (bn): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "          (act_fn): Mish()\n",
       "        )\n",
       "        (conv_2): ConvLayer(\n",
       "          (conv): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "          (bn): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        )\n",
       "      )\n",
       "      (merge): Mish()\n",
       "    )\n",
       "    (bl_2): NewResBlock(\n",
       "      (convs): Sequential(\n",
       "        (conv_0): ConvLayer(\n",
       "          (conv): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "          (bn): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "          (act_fn): Mish()\n",
       "        )\n",
       "        (conv_1): ConvLayer(\n",
       "          (conv): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "          (bn): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "          (act_fn): Mish()\n",
       "        )\n",
       "        (conv_2): ConvLayer(\n",
       "          (conv): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "          (bn): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        )\n",
       "      )\n",
       "      (merge): Mish()\n",
       "    )\n",
       "    (bl_3): NewResBlock(\n",
       "      (convs): Sequential(\n",
       "        (conv_0): ConvLayer(\n",
       "          (conv): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "          (bn): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "          (act_fn): Mish()\n",
       "        )\n",
       "        (conv_1): ConvLayer(\n",
       "          (conv): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "          (bn): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "          (act_fn): Mish()\n",
       "        )\n",
       "        (conv_2): ConvLayer(\n",
       "          (conv): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "          (bn): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        )\n",
       "      )\n",
       "      (merge): Mish()\n",
       "    )\n",
       "    (bl_4): NewResBlock(\n",
       "      (convs): Sequential(\n",
       "        (conv_0): ConvLayer(\n",
       "          (conv): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "          (bn): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "          (act_fn): Mish()\n",
       "        )\n",
       "        (conv_1): ConvLayer(\n",
       "          (conv): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "          (bn): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "          (act_fn): Mish()\n",
       "        )\n",
       "        (conv_2): ConvLayer(\n",
       "          (conv): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "          (bn): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        )\n",
       "      )\n",
       "      (merge): Mish()\n",
       "    )\n",
       "    (bl_5): NewResBlock(\n",
       "      (convs): Sequential(\n",
       "        (conv_0): ConvLayer(\n",
       "          (conv): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "          (bn): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "          (act_fn): Mish()\n",
       "        )\n",
       "        (conv_1): ConvLayer(\n",
       "          (conv): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "          (bn): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "          (act_fn): Mish()\n",
       "        )\n",
       "        (conv_2): ConvLayer(\n",
       "          (conv): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "          (bn): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        )\n",
       "      )\n",
       "      (merge): Mish()\n",
       "    )\n",
       "  )\n",
       "  (l_3): Sequential(\n",
       "    (bl_0): NewResBlock(\n",
       "      (reduce): MaxBlurPool2d()\n",
       "      (convs): Sequential(\n",
       "        (conv_0): ConvLayer(\n",
       "          (conv): Conv2d(1024, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "          (bn): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "          (act_fn): Mish()\n",
       "        )\n",
       "        (conv_1): ConvLayer(\n",
       "          (conv): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "          (bn): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "          (act_fn): Mish()\n",
       "        )\n",
       "        (conv_2): ConvLayer(\n",
       "          (conv): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "          (bn): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        )\n",
       "      )\n",
       "      (idconv): ConvLayer(\n",
       "        (conv): Conv2d(1024, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "      )\n",
       "      (merge): Mish()\n",
       "    )\n",
       "    (bl_1): NewResBlock(\n",
       "      (convs): Sequential(\n",
       "        (conv_0): ConvLayer(\n",
       "          (conv): Conv2d(2048, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "          (bn): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "          (act_fn): Mish()\n",
       "        )\n",
       "        (conv_1): ConvLayer(\n",
       "          (conv): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "          (bn): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "          (act_fn): Mish()\n",
       "        )\n",
       "        (conv_2): ConvLayer(\n",
       "          (conv): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "          (bn): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        )\n",
       "      )\n",
       "      (merge): Mish()\n",
       "    )\n",
       "    (bl_2): NewResBlock(\n",
       "      (convs): Sequential(\n",
       "        (conv_0): ConvLayer(\n",
       "          (conv): Conv2d(2048, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "          (bn): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "          (act_fn): Mish()\n",
       "        )\n",
       "        (conv_1): ConvLayer(\n",
       "          (conv): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "          (bn): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "          (act_fn): Mish()\n",
       "        )\n",
       "        (conv_2): ConvLayer(\n",
       "          (conv): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "          (bn): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        )\n",
       "      )\n",
       "      (merge): Mish()\n",
       "    )\n",
       "  )\n",
       ")"
      ]
     },
     "execution_count": null,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model.body"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Sequential(\n",
       "  (pool): AdaptiveAvgPool2d(output_size=1)\n",
       "  (flat): Flatten()\n",
       "  (fc): Linear(in_features=2048, out_features=10, bias=True)\n",
       ")"
      ]
     },
     "execution_count": null,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model.head"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Lr find"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "data path   /notebooks/data/imagewoof2\n",
      "Learn path /notebooks/data/imagewoof2\n"
     ]
    }
   ],
   "source": [
    "learn = get_learn(model=model,size=size,bs=bs)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "learn.lr_find()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "learn.recorder.plot()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# epochs 200 9035"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "epochs = 200\n",
    "mixup = 0.2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.2"
      ]
     },
     "execution_count": null,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "start_pct"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "data path   /notebooks/data/imagewoof2\n",
      "Learn path /notebooks/data/imagewoof2\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "\n",
       "    <div>\n",
       "        <style>\n",
       "            /* Turns off some styling */\n",
       "            progress {\n",
       "                /* gets rid of default border in Firefox and Opera. */\n",
       "                border: none;\n",
       "                /* Needs to be in here for Safari polyfill so background images work as expected. */\n",
       "                background-size: auto;\n",
       "            }\n",
       "            .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n",
       "                background: #F44336;\n",
       "            }\n",
       "        </style>\n",
       "      <progress value='72' class='' max='200', style='width:300px; height:20px; vertical-align: middle;'></progress>\n",
       "      36.00% [72/200 2:03:32<3:39:37]\n",
       "    </div>\n",
       "    \n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: left;\">\n",
       "      <th>epoch</th>\n",
       "      <th>train_loss</th>\n",
       "      <th>valid_loss</th>\n",
       "      <th>accuracy</th>\n",
       "      <th>top_k_accuracy</th>\n",
       "      <th>time</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>0</td>\n",
       "      <td>2.031509</td>\n",
       "      <td>1.776479</td>\n",
       "      <td>0.420972</td>\n",
       "      <td>0.881140</td>\n",
       "      <td>01:39</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>1</td>\n",
       "      <td>1.831879</td>\n",
       "      <td>1.616891</td>\n",
       "      <td>0.504454</td>\n",
       "      <td>0.916009</td>\n",
       "      <td>01:41</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>2</td>\n",
       "      <td>1.703988</td>\n",
       "      <td>1.436533</td>\n",
       "      <td>0.604225</td>\n",
       "      <td>0.943752</td>\n",
       "      <td>01:42</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>3</td>\n",
       "      <td>1.583353</td>\n",
       "      <td>1.339898</td>\n",
       "      <td>0.646729</td>\n",
       "      <td>0.948333</td>\n",
       "      <td>01:42</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>4</td>\n",
       "      <td>1.501159</td>\n",
       "      <td>1.287390</td>\n",
       "      <td>0.666582</td>\n",
       "      <td>0.951642</td>\n",
       "      <td>01:42</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>5</td>\n",
       "      <td>1.435113</td>\n",
       "      <td>1.161131</td>\n",
       "      <td>0.728175</td>\n",
       "      <td>0.964877</td>\n",
       "      <td>01:42</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>6</td>\n",
       "      <td>1.406595</td>\n",
       "      <td>1.097769</td>\n",
       "      <td>0.758208</td>\n",
       "      <td>0.972258</td>\n",
       "      <td>01:42</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>7</td>\n",
       "      <td>1.340971</td>\n",
       "      <td>1.115647</td>\n",
       "      <td>0.751845</td>\n",
       "      <td>0.970476</td>\n",
       "      <td>01:42</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>8</td>\n",
       "      <td>1.296783</td>\n",
       "      <td>1.051306</td>\n",
       "      <td>0.775261</td>\n",
       "      <td>0.973021</td>\n",
       "      <td>01:42</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>9</td>\n",
       "      <td>1.272616</td>\n",
       "      <td>1.005550</td>\n",
       "      <td>0.799949</td>\n",
       "      <td>0.976075</td>\n",
       "      <td>01:42</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>10</td>\n",
       "      <td>1.238596</td>\n",
       "      <td>0.988957</td>\n",
       "      <td>0.809621</td>\n",
       "      <td>0.978621</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>11</td>\n",
       "      <td>1.250381</td>\n",
       "      <td>0.968646</td>\n",
       "      <td>0.818783</td>\n",
       "      <td>0.979639</td>\n",
       "      <td>01:42</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>12</td>\n",
       "      <td>1.200574</td>\n",
       "      <td>0.984042</td>\n",
       "      <td>0.809112</td>\n",
       "      <td>0.978366</td>\n",
       "      <td>01:42</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>13</td>\n",
       "      <td>1.195652</td>\n",
       "      <td>0.923768</td>\n",
       "      <td>0.829728</td>\n",
       "      <td>0.984220</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>14</td>\n",
       "      <td>1.169840</td>\n",
       "      <td>0.934471</td>\n",
       "      <td>0.833291</td>\n",
       "      <td>0.980402</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>15</td>\n",
       "      <td>1.150845</td>\n",
       "      <td>0.945562</td>\n",
       "      <td>0.823874</td>\n",
       "      <td>0.979639</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>16</td>\n",
       "      <td>1.131284</td>\n",
       "      <td>0.924936</td>\n",
       "      <td>0.834309</td>\n",
       "      <td>0.979130</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>17</td>\n",
       "      <td>1.149366</td>\n",
       "      <td>0.907583</td>\n",
       "      <td>0.834818</td>\n",
       "      <td>0.984983</td>\n",
       "      <td>01:42</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>18</td>\n",
       "      <td>1.102844</td>\n",
       "      <td>0.899178</td>\n",
       "      <td>0.843726</td>\n",
       "      <td>0.984983</td>\n",
       "      <td>01:42</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>19</td>\n",
       "      <td>1.078000</td>\n",
       "      <td>0.881743</td>\n",
       "      <td>0.847544</td>\n",
       "      <td>0.983965</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>20</td>\n",
       "      <td>1.075708</td>\n",
       "      <td>0.912234</td>\n",
       "      <td>0.842708</td>\n",
       "      <td>0.984220</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>21</td>\n",
       "      <td>1.076345</td>\n",
       "      <td>0.902111</td>\n",
       "      <td>0.842454</td>\n",
       "      <td>0.983456</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>22</td>\n",
       "      <td>1.068909</td>\n",
       "      <td>0.889469</td>\n",
       "      <td>0.841945</td>\n",
       "      <td>0.985747</td>\n",
       "      <td>01:42</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>23</td>\n",
       "      <td>1.040253</td>\n",
       "      <td>0.885184</td>\n",
       "      <td>0.850344</td>\n",
       "      <td>0.984729</td>\n",
       "      <td>01:42</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>24</td>\n",
       "      <td>1.058811</td>\n",
       "      <td>0.875762</td>\n",
       "      <td>0.855434</td>\n",
       "      <td>0.986765</td>\n",
       "      <td>01:42</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>25</td>\n",
       "      <td>1.051139</td>\n",
       "      <td>0.866260</td>\n",
       "      <td>0.859761</td>\n",
       "      <td>0.982693</td>\n",
       "      <td>01:42</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>26</td>\n",
       "      <td>1.020959</td>\n",
       "      <td>0.875905</td>\n",
       "      <td>0.856961</td>\n",
       "      <td>0.984729</td>\n",
       "      <td>01:42</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>27</td>\n",
       "      <td>0.997278</td>\n",
       "      <td>0.866538</td>\n",
       "      <td>0.857725</td>\n",
       "      <td>0.981929</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>28</td>\n",
       "      <td>1.008027</td>\n",
       "      <td>0.868595</td>\n",
       "      <td>0.858997</td>\n",
       "      <td>0.982184</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>29</td>\n",
       "      <td>0.990563</td>\n",
       "      <td>0.875727</td>\n",
       "      <td>0.850853</td>\n",
       "      <td>0.981420</td>\n",
       "      <td>01:42</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>30</td>\n",
       "      <td>0.991486</td>\n",
       "      <td>0.854782</td>\n",
       "      <td>0.863833</td>\n",
       "      <td>0.983456</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>31</td>\n",
       "      <td>0.988857</td>\n",
       "      <td>0.856092</td>\n",
       "      <td>0.863578</td>\n",
       "      <td>0.982693</td>\n",
       "      <td>01:42</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>32</td>\n",
       "      <td>0.970601</td>\n",
       "      <td>0.859073</td>\n",
       "      <td>0.865869</td>\n",
       "      <td>0.982184</td>\n",
       "      <td>01:42</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>33</td>\n",
       "      <td>0.965112</td>\n",
       "      <td>0.838691</td>\n",
       "      <td>0.871723</td>\n",
       "      <td>0.982438</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>34</td>\n",
       "      <td>0.973440</td>\n",
       "      <td>0.890844</td>\n",
       "      <td>0.850853</td>\n",
       "      <td>0.976584</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>35</td>\n",
       "      <td>0.974282</td>\n",
       "      <td>0.840823</td>\n",
       "      <td>0.872741</td>\n",
       "      <td>0.982184</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>36</td>\n",
       "      <td>0.957239</td>\n",
       "      <td>0.863050</td>\n",
       "      <td>0.860779</td>\n",
       "      <td>0.982693</td>\n",
       "      <td>01:42</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>37</td>\n",
       "      <td>0.960013</td>\n",
       "      <td>0.870948</td>\n",
       "      <td>0.857470</td>\n",
       "      <td>0.980911</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>38</td>\n",
       "      <td>0.960899</td>\n",
       "      <td>0.849780</td>\n",
       "      <td>0.865869</td>\n",
       "      <td>0.982184</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>39</td>\n",
       "      <td>0.945404</td>\n",
       "      <td>0.859700</td>\n",
       "      <td>0.862815</td>\n",
       "      <td>0.980657</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>40</td>\n",
       "      <td>0.954152</td>\n",
       "      <td>0.852834</td>\n",
       "      <td>0.865869</td>\n",
       "      <td>0.982947</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>41</td>\n",
       "      <td>0.935754</td>\n",
       "      <td>0.868772</td>\n",
       "      <td>0.861288</td>\n",
       "      <td>0.978875</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>42</td>\n",
       "      <td>0.924385</td>\n",
       "      <td>0.842584</td>\n",
       "      <td>0.868923</td>\n",
       "      <td>0.982693</td>\n",
       "      <td>01:42</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>43</td>\n",
       "      <td>0.929090</td>\n",
       "      <td>0.848769</td>\n",
       "      <td>0.866887</td>\n",
       "      <td>0.980911</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>44</td>\n",
       "      <td>0.938072</td>\n",
       "      <td>0.860242</td>\n",
       "      <td>0.864597</td>\n",
       "      <td>0.980657</td>\n",
       "      <td>01:42</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>45</td>\n",
       "      <td>0.918519</td>\n",
       "      <td>0.865911</td>\n",
       "      <td>0.860524</td>\n",
       "      <td>0.978112</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>46</td>\n",
       "      <td>0.918676</td>\n",
       "      <td>0.846837</td>\n",
       "      <td>0.867142</td>\n",
       "      <td>0.981675</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>47</td>\n",
       "      <td>0.910535</td>\n",
       "      <td>0.830877</td>\n",
       "      <td>0.872487</td>\n",
       "      <td>0.984220</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>48</td>\n",
       "      <td>0.913968</td>\n",
       "      <td>0.850314</td>\n",
       "      <td>0.866378</td>\n",
       "      <td>0.980148</td>\n",
       "      <td>01:42</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>49</td>\n",
       "      <td>0.925118</td>\n",
       "      <td>0.845216</td>\n",
       "      <td>0.868414</td>\n",
       "      <td>0.982184</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>50</td>\n",
       "      <td>0.907736</td>\n",
       "      <td>0.852555</td>\n",
       "      <td>0.865869</td>\n",
       "      <td>0.978621</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>51</td>\n",
       "      <td>0.887291</td>\n",
       "      <td>0.840662</td>\n",
       "      <td>0.870196</td>\n",
       "      <td>0.978875</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>52</td>\n",
       "      <td>0.893743</td>\n",
       "      <td>0.853428</td>\n",
       "      <td>0.864851</td>\n",
       "      <td>0.982693</td>\n",
       "      <td>01:42</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>53</td>\n",
       "      <td>0.886275</td>\n",
       "      <td>0.851718</td>\n",
       "      <td>0.870960</td>\n",
       "      <td>0.980402</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>54</td>\n",
       "      <td>0.903767</td>\n",
       "      <td>0.835960</td>\n",
       "      <td>0.868669</td>\n",
       "      <td>0.981929</td>\n",
       "      <td>01:42</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>55</td>\n",
       "      <td>0.895756</td>\n",
       "      <td>0.849255</td>\n",
       "      <td>0.867142</td>\n",
       "      <td>0.978366</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>56</td>\n",
       "      <td>0.881486</td>\n",
       "      <td>0.840950</td>\n",
       "      <td>0.872741</td>\n",
       "      <td>0.977093</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>57</td>\n",
       "      <td>0.883624</td>\n",
       "      <td>0.846904</td>\n",
       "      <td>0.866633</td>\n",
       "      <td>0.982438</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>58</td>\n",
       "      <td>0.882582</td>\n",
       "      <td>0.848930</td>\n",
       "      <td>0.870960</td>\n",
       "      <td>0.978621</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>59</td>\n",
       "      <td>0.887206</td>\n",
       "      <td>0.838673</td>\n",
       "      <td>0.862051</td>\n",
       "      <td>0.983711</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>60</td>\n",
       "      <td>0.868840</td>\n",
       "      <td>0.824728</td>\n",
       "      <td>0.875541</td>\n",
       "      <td>0.980911</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>61</td>\n",
       "      <td>0.875495</td>\n",
       "      <td>0.831172</td>\n",
       "      <td>0.872232</td>\n",
       "      <td>0.979893</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>62</td>\n",
       "      <td>0.874028</td>\n",
       "      <td>0.847312</td>\n",
       "      <td>0.865615</td>\n",
       "      <td>0.978875</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>63</td>\n",
       "      <td>0.876487</td>\n",
       "      <td>0.836926</td>\n",
       "      <td>0.872487</td>\n",
       "      <td>0.977602</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>64</td>\n",
       "      <td>0.868328</td>\n",
       "      <td>0.840022</td>\n",
       "      <td>0.869941</td>\n",
       "      <td>0.979384</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>65</td>\n",
       "      <td>0.865459</td>\n",
       "      <td>0.835503</td>\n",
       "      <td>0.870960</td>\n",
       "      <td>0.983456</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>66</td>\n",
       "      <td>0.877935</td>\n",
       "      <td>0.825228</td>\n",
       "      <td>0.875541</td>\n",
       "      <td>0.983711</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>67</td>\n",
       "      <td>0.849556</td>\n",
       "      <td>0.829485</td>\n",
       "      <td>0.872232</td>\n",
       "      <td>0.979384</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>68</td>\n",
       "      <td>0.869761</td>\n",
       "      <td>0.831180</td>\n",
       "      <td>0.874777</td>\n",
       "      <td>0.979639</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>69</td>\n",
       "      <td>0.865039</td>\n",
       "      <td>0.811161</td>\n",
       "      <td>0.883431</td>\n",
       "      <td>0.981929</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>70</td>\n",
       "      <td>0.869698</td>\n",
       "      <td>0.821105</td>\n",
       "      <td>0.877577</td>\n",
       "      <td>0.982438</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>71</td>\n",
       "      <td>0.867788</td>\n",
       "      <td>0.825955</td>\n",
       "      <td>0.878850</td>\n",
       "      <td>0.979639</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table><p>\n",
       "\n",
       "    <div>\n",
       "        <style>\n",
       "            /* Turns off some styling */\n",
       "            progress {\n",
       "                /* gets rid of default border in Firefox and Opera. */\n",
       "                border: none;\n",
       "                /* Needs to be in here for Safari polyfill so background images work as expected. */\n",
       "                background-size: auto;\n",
       "            }\n",
       "            .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n",
       "                background: #F44336;\n",
       "            }\n",
       "        </style>\n",
       "      <progress value='51' class='' max='282', style='width:300px; height:20px; vertical-align: middle;'></progress>\n",
       "      18.09% [51/282 00:16<01:13 0.8583]\n",
       "    </div>\n",
       "    "
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "learn = get_learn(model=model,size=size,bs=bs,mixup=mixup)\n",
    "learn.fit_fc(epochs, lr, moms,start_pct)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[tensor(0.9007), tensor(0.9837)]"
      ]
     },
     "execution_count": null,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "learn.recorder.metrics[-1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[tensor(0.8730), tensor(0.9809)]"
      ]
     },
     "execution_count": null,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "learn.recorder.metrics[79]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYgAAAEGCAYAAAB/+QKOAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nO3deXxU5dXA8d+Zyb6RhIR9SVBEFlliRBFREKqAVlyo1brbylu31tpF615bFWtrXdpXX1rFWi3Wpe4guKCIC6vsIIsGCEECARIg68yc9497k0xgEkLIZEg4389nPjPz3O3cMMyZZ7nPFVXFGGOM2Z8n0gEYY4w5MlmCMMYYE5IlCGOMMSFZgjDGGBOSJQhjjDEhRUU6gOaUkZGhWVlZkQ7DGGNajUWLFu1Q1cxQy9pUgsjKymLhwoWRDsMYY1oNEdlY3zJrYjLGGBNS2BKEiHQXkdkislpEVorIz0OsM1JEikVkifu4J2jZWBH5WkTWi8jt4YrTGGNMaOFsYvIBv1TVxSKSDCwSkfdVddV+632qqucGF4iIF/gb8D0gH1ggIm+F2NYYY0yYhC1BqOpWYKv7eo+IrAa6Ao35kh8KrFfVbwBE5CVgQiO3Nca0clVVVeTn51NeXh7pUNqMuLg4unXrRnR0dKO3aZFOahHJAoYA80IsHiYiS4EC4FequhInkWwOWicfOLmefU8CJgH06NGj+YI2xkRMfn4+ycnJZGVlISKRDqfVU1WKiorIz88nOzu70duFvZNaRJKA14BbVLVkv8WLgZ6qOgh4EnijerMQuwo5q6CqTlHVXFXNzcwMOVLLGNPKlJeX0759e0sOzUREaN++/SHXyMKaIEQkGic5vKiq/91/uaqWqOpe9/V0IFpEMnBqDN2DVu2GU8MwxhwlLDk0r6b8PcM5ikmAZ4DVqvpoPet0ctdDRIa68RQBC4DeIpItIjHAJcBb4Yp17rod5O3YF67dG2NMqxTOPojhwBXAchFZ4pbdAfQAUNWngYnA9SLiA8qAS9S5QYVPRG4CZgJe4Fm3byIsLn/G6RrJm3xOuA5hjGlFioqKGD16NADfffcdXq+X6ibs+fPnExMTc9B9XHPNNdx+++306dMnrLGGUzhHMc0ldF9C8Dp/Bf5az7LpwPQwhGaMMQ1q3749S5Y4v2vvu+8+kpKS+NWvflVnHVVFVfF4QjfETJ06NexxhptdSW2MMY20fv16BgwYwE9/+lNycnLYunUrkyZNIjc3l/79+3P//ffXrHvaaaexZMkSfD4fqamp3H777QwaNIhhw4ZRWFgYwbNovDY1F5Mxpu353dsrWVWw/wDIw9OvSwr3fr9/k7ZdtWoVU6dO5emnnwZg8uTJpKen4/P5GDVqFBMnTqRfv351tikuLuaMM85g8uTJ3HrrrTz77LPcfvuRP0GE1SCMMeYQHHPMMZx00kk176dNm0ZOTg45OTmsXr2aVasOvJ43Pj6ecePGAXDiiSeSl5fXUuEeFqtBGGOOaE39pR8uiYmJNa/XrVvH448/zvz580lNTeXyyy8Pea1BcKe21+vF5/O1SKyHy2oQxhjTRCUlJSQnJ5OSksLWrVuZOXNmpENqVlaDMMaYJsrJyaFfv34MGDCAXr16MXz48EiH1KzEueygbcjNzdWm3DAo6/Z3AbsOwpgjxerVq+nbt2+kw2hzQv1dRWSRquaGWt+amIwxxoRkCcIYY0xIliCMMcaEZAnCGGNMSJYgjDHGhGQJwhhjTEiWIIwxZj8jR4484KK3xx57jBtuuKHebZKSkgAoKChg4sSJ9e73YEPxH3vsMUpLS2vejx8/nt27dzc29GZlCQL40ck9yEg6+Pzuxpijw6WXXspLL71Up+yll17i0ksvPei2Xbp04dVXX23ysfdPENOnTyc1NbXJ+zscliCAaI9Q6QtEOgxjzBFi4sSJvPPOO1RUVACQl5dHQUEBgwcPZvTo0eTk5HDCCSfw5ptvHrBtXl4eAwYMAKCsrIxLLrmEgQMH8sMf/pCysrKa9a6//vqaacLvvfdeAJ544gkKCgoYNWoUo0aNAiArK4sdO3YA8OijjzJgwAAGDBjAY489VnO8vn37ct1119G/f3/OOuusOsc5HDbVBhDl9eALtJ0ryo1pU2bcDt8tb959djoBxk2ud3H79u0ZOnQo7733HhMmTOCll17ihz/8IfHx8bz++uukpKSwY8cOTjnlFM4777x67/f81FNPkZCQwLJly1i2bBk5OTk1yx544AHS09Px+/2MHj2aZcuW8bOf/YxHH32U2bNnk5GRUWdfixYtYurUqcybNw9V5eSTT+aMM84gLS2NdevWMW3aNP7+979z8cUX89prr3H55Zcf9p/JahBAtNeDz28JwhhTK7iZqbp5SVW54447GDhwIGPGjGHLli1s27at3n3MmTOn5ot64MCBDBw4sGbZyy+/TE5ODkOGDGHlypUhpwkPNnfuXC644AISExNJSkriwgsv5NNPPwUgOzubwYMHA807nbjVIIBor1AVsCYmY45IDfzSD6fzzz+fW2+9lcWLF1NWVkZOTg7PPfcc27dvZ9GiRURHR5OVlRVyeu9goWoX3377LX/6059YsGABaWlpXH311QfdT0Pz5sXGxta89nq9zdbEZDUIIMrjQRX81sxkjHElJSUxcuRIrr322prO6eLiYjp06EB0dDSzZ89m48aNDe7j9NNP58UXXwRgxYoVLFu2DHCmCU9MTKRdu3Zs27aNGTNm1GyTnJzMnj17Qu7rjTfeoLS0lH379vH6668zYsSI5jrdkMJWgxCR7sDzQCcgAExR1cf3W+cy4Db37V7gelVd6i7LA/YAfsBX32yDzSHK62T4Kn8Ar8cbrsMYY1qZSy+9lAsvvLCmqemyyy7j+9//Prm5uQwePJjjjz++we2vv/56rrnmGgYOHMjgwYMZOnQoAIMGDWLIkCH079//gGnCJ02axLhx4+jcuTOzZ8+uKc/JyeHqq6+u2cdPfvIThgwZEta704Vtum8R6Qx0VtXFIpIMLALOV9VVQeucCqxW1V0iMg64T1VPdpflAbmquqOxx2zqdN8XP/0F8/N2svju75GeaMNdjYk0m+47PA51uu+w1SBUdSuw1X29R0RWA12BVUHrfB60yZdAt3DF05B2CdEANtTVGGOCtEgfhIhkAUOAeQ2s9mNgRtB7BWaJyCIRmdTAvieJyEIRWbh9+/YmxTembwcA/G3o5knGGHO4wj6KSUSSgNeAW1S1pJ51RuEkiNOCioeraoGIdADeF5E1qjpn/21VdQowBZwmpqbEGBvl9DtYDcKYI4eq1nt9gTl0TelOCGsNQkSicZLDi6r633rWGQj8A5igqkXV5apa4D4XAq8DQ8MVZ0yU82eo8PnDdQhjzCGIi4ujqKioSV9q5kCqSlFREXFxcYe0XThHMQnwDE4n9KP1rNMD+C9whaquDSpPBDxu30UicBZwf7hija1OEFVWgzDmSNCtWzfy8/NparOxOVBcXBzduh1aN284m5iGA1cAy0VkiVt2B9ADQFWfBu4B2gP/61Ylq4ezdgRed8uigH+r6nvhCrSmiclvCcKYI0F0dDTZ2dmRDuOoF85RTHOBBhsQVfUnwE9ClH8DDApTaAeIsRqEMcYcwK6kJqiJyfogjDGmhiUIIDba+TPYKCZjjKllCQKI8VbXICxBGGNMNUsQQGy0XQdhjDH7swRBcA3C+iCMMaaaJQhq+yCsickYY2pZgiB4FJMlCGOMqWYJAuukNsaYUCxB4NwSMCbKY30QxhgTxBKEKzbKY6OYjDEmiCUI155yH1M/y4t0GMYYc8SwBGGMMSYkSxDGGGNCCvsd5VqLEb0zKCn3RToMY4w5YlgNwhUX7aWiykYxGWNMNatBuN5ftS3SIRhjzBHFahDGGGNCsgTh+mFu90iHYIwxRxRLEK5O7eIACAQ0wpEYY8yRwRKEKz7GuSeEzcdkjDGOsCUIEekuIrNFZLWIrBSRn4dYR0TkCRFZLyLLRCQnaNlVIrLOfVwVrjirxbkzupbZSCZjjAHCO4rJB/xSVReLSDKwSETeV9VVQeuMA3q7j5OBp4CTRSQduBfIBdTd9i1V3RWuYOPcu8qVW4IwxhggjDUIVd2qqovd13uA1UDX/VabADyvji+BVBHpDJwNvK+qO92k8D4wNlyxQm0TkyUIY4xxtEgfhIhkAUOAefst6gpsDnqf75bVVx5q35NEZKGILNy+fXuTY5y7bgcAH60pbPI+jDGmLQl7ghCRJOA14BZVLdl/cYhNtIHyAwtVp6hqrqrmZmZmNjnOodnpACTF2rWDxhgDYU4QIhKNkxxeVNX/hlglHwi+AKEbUNBAedgM7JYKQEp8dDgPY4wxrUY4RzEJ8AywWlUfrWe1t4Ar3dFMpwDFqroVmAmcJSJpIpIGnOWWhU31fam3lZSH8zDGGNNqhLM9ZThwBbBcRJa4ZXcAPQBU9WlgOjAeWA+UAte4y3aKyO+BBe5296vqzjDGWtN+9bu3V3HN8OxwHsoYY1qFsCUIVZ1L6L6E4HUUuLGeZc8Cz4YhtJCS46zvwRhjgtmV1K6MpNhIh2CMMUcUSxD7OSkrLdIhGGPMEcESxH4W5IXtYm1jjGlVLEHsx/oijDHGYd+GQUb0zmBvhd2X2hhjwGoQdcRHeymrtLmYjDEGLEHUkRDjpdQShDHGAJYg6thWUsGmnaU4l2cYY8zRzRJEkC++KQJg087SCEdijDGRZwkihJcWbD74SsYY08ZZggjSLS0egKc+3hDhSIwxJvIsQQTp2T4h0iEYY8wRwxJEkL/9KAeAzu3iIhyJMcZEniWIIKkJMQB4PQ1OQmuMMUcFSxAh5O8qi3QIxhgTcZYgjDHGhGQJYj9dU+NJjPFGOgxjjIk4SxD7Gdw9lU7WSW2MMZYg9rdpZykbtu8jELDpNowxRzdLENUWPAOTe7JuSyEAby7dEuGAjDEmssKWIETkWREpFJEV9Sz/tYgscR8rRMQvIunusjwRWe4uWxiuGOvwRkP5btpTAsAbXxW0yGGNMeZIFc4axHPA2PoWquojqjpYVQcDvwU+UdWdQauMcpfnhjHGWgkZAKTLHgA+Wbu9RQ5rjDFHqrAlCFWdA+w86IqOS4Fp4YqlURKdBPGbEe0B6JAcG8lojDEm4iLeByEiCTg1jdeCihWYJSKLRGTSQbafJCILRWTh9u2H8as/wUkM/dtVAjCoe2rT92WMMW1AxBME8H3gs/2al4arag4wDrhRRE6vb2NVnaKquaqam5mZ2fQo3BpEOy0G4ISu7Zq+L2OMaQOOhARxCfs1L6lqgftcCLwODA17FLEp4I3BW1ZElEfYXVoV9kMaY8yRLKIJQkTaAWcAbwaVJYpIcvVr4Cwg5EioZg7G6ajeV4QvoDz72bdhP6QxxhzJosK1YxGZBowEMkQkH7gXiAZQ1afd1S4AZqnqvqBNOwKvi0h1fP9W1ffCFWcdie2hdEfN292llTUzvBpjzNEmbAlCVS9txDrP4QyHDS77BhgUnqgOIiED9tV2dP9t9nruPKdfREIxxphIOxL6II4ciZmwr7YGYbNtGGOOZpYggiVmQGkRZxznjIY6pVf7CAdkjDGR06gEISLHiEis+3qkiPxMRNrehQIJ7aFyL3eelQ3AR2sKIxyQMcZETmNrEK8BfhE5FngGyAb+HbaoIsW9FiKmwrkkY9r8TZGMxhhjIqqxCSKgqj6cUUePqeovgM7hCytC3PmYoisaO0OIMca0XY1NEFUicilwFfCOWxYdnpAiKNHpe+jk3RPhQIwxJvIamyCuAYYBD6jqtyKSDbwQvrAixG1i8pbX1iBUbSiTMebo1KgEoaqrVPVnqjpNRNKAZFWdHObYWp47YR/7dnB2/44AFO6piGBAxhgTOY0dxfSxiKS4N/RZCkwVkUfDG1oExLUDTzSU7mDmym0AXDN1QYSDMsaYyGhsE1M7VS0BLgSmquqJwJjwhRUhIk4tIuhiuSivRDAgY4yJnMYmiCgR6QxcTG0ndduUkA5lu3jzxuEALMsvjnBAxhgTGY1NEPcDM4ENqrpARHoB68IXVgTFp0HZLo7rmBzpSIwxJqIaNVmfqr4CvBL0/hvgonAFFVHxaVC0gdgom4XEGHN0a2wndTcReV1ECkVkm4i8JiLdwh1cRCSkQ9lOPB7rezDGHN0a+zN5KvAW0AXoCrztlrU98U4fBEHXP5RX+SMYkDHGREZjE0Smqk5VVZ/7eA44jBtAH8Hi08BfCZW19zAqKbfbjxpjjj6NTRA7RORyEfG6j8uBonAGFjEJ6c5z2U6SYp0umv8u3hLBgIwxJjIamyCuxRni+h2wFZiIM/1G2xPvJojSneyt8AEwecaaCAZkjDGR0dipNjap6nmqmqmqHVT1fJyL5tqe+DTnuWwXr10/LLKxGGNMBB3OWM5bmy2KI0lQE9OJPdMjG4sxxkTQ4SSIBseBisiz7rDYFfUsHykixSKyxH3cE7RsrIh8LSLrReT2w4jx0AU1MRljzNHscBLEwebBfg4Ye5B1PlXVwe7jfgAR8QJ/A8YB/YBLRaTfYcR5aGqamHbXKfYHbNpvY8zRpcEEISJ7RKQkxGMPzjUR9VLVOUBTfoYPBdar6jeqWgm8BExown6aJioGYpKgrG7oUz/7tsVCMMaYI0GDCUJVk1U1JcQjWVUbNU3HQQwTkaUiMkNE+rtlXYHNQevku2UhicgkEVkoIgu3b9/eDCHhNDPt18RUPaLJGGOOFpGccGgx0FNVBwFPAm+45aH6Nupt31HVKaqaq6q5mZnNdO1eQlpNDeKVnzojmR77oG3OTWiMMfWJWIJQ1RJV3eu+ng5Ei0gGTo2he9Cq3YCCFg2ueroNwBs0J9Nym/rbGHMUiViCEJFOIiLu66FuLEXAAqC3iGSLSAxwCc48UC0nPq2miSk9Iaam+J3lLZunjDEmkpqjHyEkEZkGjAQyRCQfuBeIBlDVp3Guxr5eRHxAGXCJqirgE5GbcO4/4QWeVdWV4YozJHdGV4Ce7RNqihfm7WrRMIwxJpLCliBU9dKDLP8r8Nd6lk0HpocjrkaJT3eGuQb8iMfL3ef24/fvrGLRRksQxpijh90VJ5SEdECh3OlzyM6orUWo2vUQxpijgyWIUJI6Os8lTp9D7w61tx/9dse+UFsYY0ybYwkilLQs53mXc3Fc9/TaGsSZf/6E0kq7JsIY0/ZZggglPdt53hn66ul+98xswWCMMSYyLEGEEp8Gcak1NQiAP/9gUAQDMsaYlmcJoj7p2XVqEF1S4yMYjDHGtDxLEPVJy4ZdeTVvT+lV994Qu/ZVtnBAxhjTsixB1Cc9G4o3g9/pkBYRVt1/ds3itdv2RCoyY4xpEZYg6pOWDQGfkyRcCTG11xXa1RDGmLbOEkR9qkcy7Qo9kmn68q1U+gItGJAxxrQsSxD1SQs91PX5a4c6z19sZPryrS0dlTHGtBhLEPVJ7gze2ANqEHHR3prXG7bvbemojDGmxViCqI/HAxnHwdZldYpjo2r/ZO5s5cYY0yZZgmhI1nDYPB98FTVFwTWIzTtL2VhkczMZY9omSxANyRoBvjLYsrimqMpf2zH9+ldbOOORjynYXRaJ6IwxJqwsQTSk56mAQN7cmqIo74HNSqdO/qgFgzLGmJZhCaIhCenQcQDkzakpOr5TSgQDMsaYlmMJ4mCyRxzQDzHvjtERDMgYY1qGJYiD6ZYLvnLYsbamqGNKHL8Z2yeCQRljTPiFLUGIyLMiUigiK+pZfpmILHMfn4vIoKBleSKyXESWiMjCcMXYKCndnOeSuhfF/fT0Y0iIqR3R1Pfu91oyKmOMCbtw1iCeA8Y2sPxb4AxVHQj8Hpiy3/JRqjpYVXPDFF/jpHR2nvcU1Cn2eIRV99eeXlmVn9Me/oif/DOy+cwYY5pL1MFXaRpVnSMiWQ0s/zzo7ZdAt3DFcliSOjnPe7476Kr5u8rI32VDXo0xbcOR0gfxY2BG0HsFZonIIhGZFKGYHFExkJgJJQUhFyfHhS3HGmNMREU8QYjIKJwEcVtQ8XBVzQHGATeKyOkNbD9JRBaKyMLt27eHJ8jkzrAn9MR8PxraIzzHNMaYCItoghCRgcA/gAmqWlRdrqoF7nMh8DowtL59qOoUVc1V1dzMzMzwBJrS5YBO6mq3jzuee7/fLzzHNcaYCIpYghCRHsB/gStUdW1QeaKIJFe/Bs4CQo6EajHJnQ7opK4mIlx+Ss86ZXk7bH4mY0zrF85hrtOAL4A+IpIvIj8WkZ+KyE/dVe4B2gP/u99w1o7AXBFZCswH3lXVyI4hTe4CpUV1LpYLFu2t+2cc+aePmTJnQ0tEZowxYSOqbefmmbm5ubpwYRiGmS5+Ht66GX6+DNJ6hlxlw/a9nPfkXPZV+uuUz79jNB1S4po/JmOMaQYisqi+ywki3kndKiR3cZ7r6agGOCYziaX3nnVA+dAHPwxXVMYYE1aWIBqj+mK5eoa6Vovy2p/TGNN22DdaYyRXX0198IvlOiTHHlC2eWdpc0dkjDFhZwmiMeLTnPtT1zOSKdj8O8ccUDbij7OZ901RiLWNMebIZQmiMUScZqbiLY1aPcpz4E2FfjjlS0orfc0dmTHGhI0liMbKPB62Ne5yjGX3OZ3Vb900vE75Ux9v4LrnF/LmksYlGmOMiSSbSKixup4Ia2dCeQnENXxXuYSYKPImn3NA+ZMfrQfg/VXbmDC4a1jCNMaY5mI1iMbqkgMobF0S6UiMMaZFWIJorC5DnOcti5tld1X+QLPsxxhjwsUSRGMltofUnrBlEXz5FCx7uVGbrbr/bAZ3Tz2gvPedM9habPeOMMYcuSxBHIquJ8K69+G92+HTRxu1SUJMFG/cOJxB3dodsGzYQx81d4TGGNNsLEEciq454CsD8cCOr6Fib6M3/ddPTqZjyoEX0Q24dyZZt7/bnFEaY0yzsARxKPqMh57D4ewHQQPw3bJGb5oSF828O8Yw9ZqT6pTvrXCujQgE2s6kicaYtsESxKFofwxcMx36X+i8L/jqkHcx8rjQNzXqdcd0bnnpK778poiXF2w+nCiNMaZZWIJoiuSOkNK1SSOaRCTkNRIAbywp4JIpX/Kb1xpfMzHGmHCxC+WaqsuQJtUgGqu4rIq3lmxhSI80Kv0Bcnqkhe1YxhgTitUgmqrLENi5Acp2N2nz939xeoPLp8zZwN1vruTcJ+dy4f9+Tv4umxHWGNOyLEE0VdcTnef8BU3avHfHZPImn8Oa348Nufxvs+vesvS0h2fz6Kyvm3QsY4xpCksQTdXjFIiKd66LOAxx0d5Gr/uEO5eTMca0BEsQTRUdD9kjYP3hJQiAjKSYmtfnDux82PszxpjmENZOahF5FjgXKFTVASGWC/A4MB4oBa5W1cXusquAu9xV/6Cq/wxnrE3S+yxYNwuKNjhDYJto4V3fA5z5mYrLqnhnWf33vt5b4WPAvTMB6h0NZYwxzSHcNYjngNCN7I5xQG/3MQl4CkBE0oF7gZOBocC9InLkDeM51r173LpZzbK7aK+HjKTYA+4jEWzc43NqXn+6bnuzHNcYY0IJa4JQ1TnAzgZWmQA8r44vgVQR6QycDbyvqjtVdRfwPg0nmshIz4aM42DpNPBVNttuB3ZL5ZrhWVx9atYByzbvrJ3g74pn5rN6awlFeysoLq1qtuMbYwxEvg+iKxB82XC+W1Zf+QFEZJKILBSRhdu3R+AX9cjfwtalMOvOZt3tvd/vz33n9T9oM9K4xz/lxD98wKD7Z1Gw22aHNcY0n0gniANv3gzaQPmBhapTVDVXVXMzM0NPYxFWAy6EYTfB/Cmw8g2oKnemAy8vbrZD3HVOX06vZ4qOYKdO/ojnv8hj6ebaazNWbCmmvMrfbLEYY44ekb6SOh/oHvS+G1Dglo/cr/zjFovqUI35HeTNhem/guWvwJp3wBsDJ/24WXb/kxG9+MmIXmzZXcbwyQ1PEX7PmysPKOvbOYUZPx/RLLEYY44eka5BvAVcKY5TgGJV3QrMBM4SkTS3c/ost+zI5I2CCX+Fsl1OchAP5C9s9sN0TY0nb/I5bHhw/CFtt3prCcWlVWTd/i63vVo7z9Pv3l7JA++uau4wjTFthKiGb5ppEZmGUxPIALbhjEyKBlDVp91hrn/F6YAuBa5R1YXuttcCd7i7ekBVpx7seLm5ubpwYfN/MTfa4n/B3u8gfxEUrYebwxfL+sK9jHn0kyZvnzf5nJr7UNhwWWOOXiKySFVzQy0LaxOTql56kOUK3FjPsmeBZ8MRV9jkXOE8f/pnWDsDSndCQjqoQsAH3uhmO9SxHZL49qHxvLIonwmDu9DnrvcOafs5a2s79FWVLbvLyEyOJTaq8Vd2G2Patkg3MbVN3dybAm1ZDHsLYeo4+NtQqNjTrIcRES7O7U5slJe8yecwrFf7Rm975bPza15n/3Y6pz08uybJFO4p580lW5o1VmNM6xPpTuq2qcsQpx9iyQvwzkLYtx18FfDh/TD+kbAddtqkU2pev/DlRu56Y8Uh7yP49qfHZCYxoGvtvbSnL99K/y4pzFm7nYykWMadYNOCGNOWWYIIh9hk6NAPVr7u3Fjo2vdgyTRnKGz/C6HnsLCH8KOhPchMjmVoVjpDft+0+aLOfXIuMV4PC+4cw+Dfz2L/7qpQfRfrC/dS6QvQr0tKk45pjDlyWBNTuAy5HHqfDdfNdmoUo++GtJ7w2o9hX1HddYvznesnmpHHI5zdvxNpiTGc404A2DU1nhtHHdqcUZX+AIPuPzA5gNMUtb8xj37C+Cc+JZyDH4wxLSOso5haWsRHMR1MwRJ45nvQbSj8YCokdYA938Hjg53kcfG/IPO4sBx6eX4xA7qmICI8M/dbfv+OM7w1eDRTU7z/i9Pp2C6ON77awtMfb6CguDZpXJTTjSiP8NCFJ+BXJdpb+3tEVflgdSFnHJdJTJT9TjEmUhoaxWQJoqUtfQneuhmiE+Di52HjZ/DJH53RTr4K+NHLkFX/ZH3N5cPV24iP9nLqsRn8Z8EmHpy+huKy8Mzn1C0tnvxdZYzoncGn63aQHBvFbeOO5643VnDFKT35/fkHTPQbUtHeCqI8HtolNIhcL6oAABvNSURBVN9oMGOOdpYgjjTb18J/LofSHYA4d6c79y/wr/Nh92YYdYczhUe7bk0/xuLnYd8OGHFr48PaU0GVP0BqQjSrt+5hyebdNTWNcPvyt6Pp1C6uwXVCXbehqjz83tdMGNyFvp2t38OYQ2UJ4ki0Yx1MGQmVe+GK1+GYM2Hvdnj5Stj0OXii4cy74NSfgccDAb8zMkqCpqlSrfs+2BNDYM82uC0PomJCr9NI/1mwiT3lPn5wYncKisv4aE0hj8wM3+1P/3jRQB6asZoTe6bz2/HHc0xmEhU+f80w3Hbx0RSXVbHugXH0vnNGzXZ/+1EOPdsn1Iy8Ki6tstqGMQdhCeJIte592PARnP1g3S/6og3wwX2w+i3IPh1yfwwz74CULjDhb+CvhM+fhDXT4co3oduJdfdbvAX+0s95fc17zqipij2w/FXoN8FpzgpWUgBJnZxE1AiqygtfbmRA13Zc8L+fN/38GykhxktpZeMnHMybfA6z1xRyzXO19wsf07cD/7jqpJDr79xXSXqik0Sr/AECqnbBoDlqNJQgrHcwknp/D8Y+dGAtoP0xTv/EeU86czq9cpUz+d+Otc4Fd0+fBqvedOaAevtn4Hf7Dir3Of0YeZ/W7uubj2HDbHgyF965Bd79pVNevAX8Plj/IfxlAHz4u9ptqspg3hTnOPP+74CwRYQrhmUxpEfoezjlTT6HvMnnMO+O0TVlf78y5OevUQ4lOQCs3banTnIA+GB1IVm3v8vHXxdy2sMfUVxWxXXPL+T215aR8/v3mTxjDT5/gN53zjjkq9KNaausBnGk27EOvp4BuddC+W5Y8Rokd4Gs02DLIvjPZc6V275y2LYKOp0AmcfDupmQ2tNpmtr7HcSnQfeh8NULMGCis5/2xzpXeleUQFQc/Hypc8xpP4SCryA+3al5XPchdB7kLKvYC7FJznTmm+fjyx5F6d5iEr5+HV90MnHHnQlJtVOTB/cbVPj8rNu2l++Ky7nttWWcO7Az//xiY0v/RRvlrnP68od3V/PD3O5cMawn7eKj+WD1Nvp3acdri/I5o08mf571Nc9dM5T4GC8ZSbEEAsq2PeV0bhcPwGfrd3BMZtJB+1aMiSRrYmrL3rkVNn3hND8ld4av/uWUH38uZPSGuX8BBP7nEydxPDUcitZB/wugcA2U7YQL/g9euBB6DncmGSwvhgunOO//dxjEp8J1H8Gi52DmnU5y2rbS2XbARNi5wUkoACnd4Op3nKnPS3dSfMqvSSz4nKiNc5xkdOrNcMoNtbWmsl3o9F/z5Hf9eHRzn0j8BcPimwfH0+uO6YAziuvW7x3HOQM78/6qbYzq04HE2CjmrN3OwG7tSIqNYk+5jy27y2r6TwIBpdznJyHGrmU14WUJ4mjynyucvouxD0OH4+H5CU4fxrmPOst3fuM8jh3jdHL7KyEqFt64AZa8CD2GOc1eXYY466//EF64yOkL2fQldOjrdKy36w6dBjh9Id4YuOgZiEuBaZc6ExMGfJDQ3plmRLxOUtGA0/x1wsVw/lNOknjxB7DhQ+dY2WfArm8pT+vD7j4Xc9eaLD5YUzup4LoHxvH9J+fSISWOKVecyPF3O01Br/50GBOf/oIeso0yjWE7TtNXZ4r4nnch//GPooLgjnploHzDcs1G3VbWBMpJYw9bqK39tKeYUmIp49BrALeNPZ6H31tzyNvtb+0fxhET5WF3aSWpCTHsrfDx9Mcb+OVZxyFBTZPbSsqJi/bSLt465c2hsQRxNNlbCO/f49zEKDHTuV92v/Oc6T8aUlkKuzc6CWB/nz8Js+5yvvBvmFenCYm1M53ybu7na/Xb8OZNMO6P0Ges05GeNRxSezgJac6fYPYfnClHKvfCulkw7hGn5rLhQ+f4W76CknwY9CNI7Q4bP4fizU7N4+T/cY5TupPKzQuIjk10bj/47afop3/C74nlibJx9Ency/jAx4ivnDW9J/FZyniuKXmat8sH4cv7jIu8c7m36ir+6T+bKHy8GnMfvWUL51Q+SIFmcEvUa/yP920UYaN2ZAftmOk/iRf8Y6jkwC9hDwEmeD5jvXZlufZq8E+dyh6ui3qXaf4zydcODf+7ABlJMezYe+A9z2f94nQu+8tbvHDzOM5+8gsA/nFlLhnJsaSueJ4O2f1JOL62HygQUBZu3MXAbu2I8ghRXuuCNJYgzOFSdTqruwyGHqccfP1AoOERUR8/DB8/CLHt4IxfO81Odbb3wycPOw8EuuY4U5EUrYOr34WFU2HFq07tJ9iAiVBaBN/MhuhE6Pt9pw9l/QfOlepF651aDFAR257YhBR6bf09v4x6mRuj3sLvjceX1ouNhbs5zrOF/J4X8NoG6C1b6CbbGej5lhKNp5xYijSFjdqRjdoBRTjNs4IBnjy2azu+V/FHKojGj5dKojnP8zmZsotX/Gfgx8uLMQ8w2PMN2zWF31ddwS6S+TzQHz+1I6dS2McNUW8RQxVLA714MzCc/e/E200KmRlzG2/7h3G7b1JN+UjPEp6L+SNbNZ07e7zAqq178O3dSTGJVO03/VpmcizzfjuaVVtLOPfJuUy77hTWfFfCNcOzASgpKiQlzguJB58puLCkHF9A6ZIaf9B1zZHDEoQ5sqg6tYJOAyCuXf3rFW1waj5JHZya0d9Odvo9PFFOs1nfc90vfHHW6dDX2ffujU5fiDfKGcL75IlOJ/5lr1DzJVteDK9eQ1W/C4la9Toy5HJnVNnLVzqDAM57Anp/j2fnfsv976ziuhHZXN99E9NfnsJxHRIYmlHFujXL6SGFxEQJ31S152X/SH4d/TIrAln0kq18q514sOoyXox5gCgJ4NPapPkH3+X82DuD7h6nCe1N/6n8oeoyLo/6AL96meD9jJ6yjXJiSJJyXvCN5l7f1UFJRHk2+hHO9C6hUr2MqHicbaSTwj7ei72NOCpJl708XHUJF3tnk+3Zxj6N5bqqX7JdU/lZ1H95oOoyvsP54s9kF1EE2Oq+T6OEB6OfYbRnMd6oKHaM/gu/WHkMn2+onUdscPdUTujajn2VPvwB5c0lBQAsuHMMmcmxDfzzKzNWfMeYvh1tmpUjgCUI0zaseddpohr3sDMiq7HWzgJ/hVOjqOb3weODnKasPufARf+AmATYNM/pu3ETl/PFt4UJg7vi9QjlVX5ivB48HnEmJFRFRAgo+AJKzGd/htl/YGHgOE70rkcVKuM7MDn+lwz3LGXddyV8FujP8aeex7/nruYYKWCMdzG3RP2XgCcaCfgQlF3Sjv8p/xkLtA+/jnqZG6Le4stAX171n84k7zskSRldZCdTfWdzpXcWf/efyxv+4TwR/SS9ZCsXVd7HQ9HP0M+zkVKN5S++i5jonUNH2UUl0XSQ3bziO537fFdxd9S/uND7KRXEcEPVzynQ9jwV/Rg9pJDn/Wcx2LOeoZ6vedx3Ac/4xnGJdzYx+NioHZkVyKWCGDpRxI1Rb1JMIi/7R7JJO/LapFxunvIeV4w9je7p8XhEuOHFxSH/ie4YfzwPTnf6bD765Rks2bybP89ay49Py+ba07Kp8geYs3Y70V4Ppx7T/oDmsRe+3Mh/Fmzm7ZtPY2txGR+s2saYfh1rRpSB08QGzkSWDbnj9eX8e96mo+ZOi5YgjAll/QfOaKxhN4GnmS6MU3VqPu2PgQX/gFl3w6X/dq6UdwUCiscj+AOKAB7BaU7butTpO0rtDuKlqFyZtWobJ2WlcWzB2+x7/RYSpYI1ge6s1J7s03h+57uSx6P/yrneeQAUaTI3V93M54EBnOVZwKPRT/Gzqpv4KJBDNynkrZi7COBhXuB4xnoWsESPZZBs4N/+0Zzk+Zq+nk0A7NNYflL1K74I9CeGKv4Q9SwXR31ChUYTK7Vzdu3WRPK0I8dKAdH4icKHV5R5gePpLoV0kZ186h/Af/yjWBQ4rqaG0kc2cXPUGwD83TeeFZpdp4nNQ4B09rCDFPZvWttfQxNOfvyrkYhAfIyXoQ98SFpCNF/dc1bN8pcXbGZkn0w6pDgDET5as41rn3O+Q07OTuelSafUGQwA4PMHOPbOGUw6vRd3jK/tsysureKVRZu57OSexMfU/TypKsu3FNOvcwqLN+1maLZzseqSzbvp1zmFmCgPL83fxKfrd/DwRQPZsaeCrIzEA86n+vtaxPmxMvrPn/DwRQM5rXdGg3+jhliCMCZSfBXOKLHmUOQMJ17WbiQ9M9rx0IzVdE9P4MZBHljwDKRl8YNP0imP68jyLcUAePHXfPG+ceNwBqfsJYCX3Ic+Zk7sLSRJOb+umsQr/pEkU8qXYzbwwOxC5gRO2K8DXbnaO5NTPKt5wncB67UrJ3rWMtE7h/aUUEQyj/kuolKjmeidw/nez9imqSzUPlzm/ZBMceJZEnA68Ad7vqFEE1CgnZTiUw9f6bG87B/JOM98hntWEitVfObvz9zACeR41vJp4ATmB/pypmcxmVJMCQm84T+NbseewKfrdgCQwl56SiErNYvAIVwH/OlvRgEw4o+z613nwpyuPDJxEFdPnV9zvFB6tk/gk1+PYvbXhVwzdQEvTTqFVxbm89ri/Jp1bhh5DJt3lfH20gIGdE3hnZtHHJDkhmal8/yPh6IKKwuKmfj0FzXL8iafw/TlW2tqZIdT27EEYYypo7zKz9IPp/HvOSvpOfJqVm3dw7kDO3P+kK4Ul1Yx6P5ZgNOfcNIDH9Rs9/TlOeQVlTK2fydG/unjA/abkRTLjr0Vdcqi8HG8bOJUz0rGe+cRwMMH/hxe9I8hgIex3vlkyXdM8H5ON9lBkSbzhv80SjSBq6Jmki572arpdJadAARU2EM8iZQTJQF2ahJbNIOdmsJQzxripZJtmkqZxpIqe1mr3fCrl3ayjzJiWBHI4jX/6SzTXoCQwj7Ge+fhx8OCQB8u9X5EphSzONCbTdqBUo0lQSqIp4L2soeOsou8QEfyNZNEKSNPO5GnnThYTac5pSVEs6u0tibXKhOEiIwFHge8wD9UdfJ+y/8CjHLfJgAdVDXVXeYHlrvLNqnqeQc7niUIYw5NWaX/gOYQcJpRAkpNJ7K6fS3Bdu6r5NN12zlvUBe+2FDEsGPaIyJ1fgm/d8sIOiTHkePe1fDHp2XzzNxvAaf55+H31vCnHwyi/70zicbHC2dBzrAzmfLlNh6Z+TWJUs7gDl4+2xbFGdGr+EEvH7/7uifbSSWT3Zzr/YJjpIAuUkQn2cXSQC8WBvpwRfvV5O+uoEQT6O1xfrnv1iQSqOBEz1ripIq1ga7sJolBsoFY8dWeu3rYRRKZUtLov2OlelE87CaR7ZpKofso0AyWazZR+OknGznVu5IKjSZPO5Ei+9ipKawIZFFODIqQKOXkyFqSpJwiTSGWKrwEqCSKSqKJxkeK7MNHFPvUuUZnn8ayi2T+8MBjjY43WEQShIh4gbXA94B8YAFwqaqGnD9aRG4Ghqjqte77vaqadCjHtARhTOSt3baHkrIqcrNqJ4XcXVpJtNdDYmwUa74roU/H5DoJJ9RU7vU52A2uVt1/NgkxUXy1aRevLspn0cZdrPluDxNP7Mari/JJppRzvF9ygXcuXZK9zCjO4m3/MDwEOMWzmpmBXO676vvc+dwMOksR8VLJPo2jlDh2ayI7aMcxUkAH2U2pxvLQiGg+/HwegpLKXjrIbjrIbjJlN5kU4xHnOzagwnLNxkOAHlJIsSaSKcXES93h2iWaQJEm0172UEE0PrzEUEU0Pvx4KdZEosRPAuUkUkGsVPGdptHpd3mN/SeqI1IJYhhwn6qe7b7/LYCqPlTP+p8D96rq++57SxDGHCXWfFfC1t3ljDr+4BcOrtu2hw3b9zF2QCe276lg0cZdnH5cBl6PULS3MuR1GKFqQNX2VfhYvbWEvKJSVJXzBnepmc332ucW8NGaQlb+7mzWfFfCRU99wYyfj2Bh3k7ufnMlvxnbhxtGHltzDje8uJhvtu+r2ffd3+tB0foFnHlCD/oPyEHi2xEX7SVvxz7mf7uTHcV7efXDuXgJ4CHAO7eMou9j6+oMiQ62/0zFX/z2TE576H3iqGTl5IkH/duFEqkEMREYq6o/cd9fAZysqjeFWLcn8CXQTVX9bpkPWAL4gMmq+kY9x5kETALo0aPHiRs3HpmTvxlj2pbq0WjN4f8+2UD39ATGn+DcP/7f8zZx+nEZPDR9Dacfl0HP9ol0TY2ne3oCAMVlVcRHe4mJ8rAgbyedUuJqlh2qSCWIHwBn75cghqrqzSHWvQ0nOdwcVNZFVQtEpBfwETBaVTc0dEyrQRhjzKGJ1P0g8oHuQe+7AQX1rHsJMC24QFUL3OdvgI+BIc0fojHGmPqEM0EsAHqLSLaIxOAkgbf2X0lE+gBpwBdBZWkiEuu+zgCGAy1zc2RjjDEAhG2yeVX1ichNwEycYa7PqupKEbkfWKiq1cniUuAlrdvW1Rf4PxEJ4CSxyfWNfjLGGBMedqGcMcYcxeye1MYYYw6ZJQhjjDEhWYIwxhgTkiUIY4wxIbWpTmoR2Q409VLqDKD+OXxbLzuv1sXOq3VpC+fVU1UzQy1oUwnicIjIwvp68lszO6/Wxc6rdWmr51XNmpiMMcaEZAnCGGNMSJYgak2JdABhYufVuth5tS5t9bwA64MwxhhTD6tBGGOMCckShDHGmJCO+gQhImNF5GsRWS8it0c6nlBE5FkRKRSRFUFl6SLyvoisc5/T3HIRkSfc81kmIjlB21zlrr9ORK4KKj9RRJa72zwh9d2bsfnPq7uIzBaR1SKyUkR+3hbOTUTiRGS+iCx1z+t3bnm2iMxzY/yPOw0+IhLrvl/vLs8K2tdv3fKvReTsoPKIfG5FxCsiX4nIO23lnNxj57mfkyUistAta9Wfw2ahqkftA2ca8g1ALyAGWAr0i3RcIeI8HcgBVgSV/RG43X19O/Cw+3o8MAMQ4BRgnlueDnzjPqe5r9PcZfOBYe42M4BxLXRenYEc93UysBbo19rPzT1Wkvs6GpjnxvsycIlb/jRwvfv6BuBp9/UlwH/c1/3cz2QskO1+Vr2R/NwCtwL/Bt5x37f6c3LjygMy9itr1Z/D5ngc7TWIocB6Vf1GVSuBl4AJEY7pAKo6B9i5X/EE4J/u638C5weVP6+OL4FUEekMnA28r6o7VXUX8D4w1l2WoqpfqPNJfj5oX2GlqltVdbH7eg+wGuja2s/NjW+v+zbafShwJvBqPedVfb6vAqPdX5gTcO6VUqGq3wLrcT6zEfncikg34BzgH+57ae3ndBCt+nPYHI72BNEV2Bz0Pt8taw06qupWcL5ogQ5ueX3n1FB5fojyFuU2QQzB+bXd6s/NbYpZAhTifFFsAHarqi9ELDXxu8uLgfYc+vmG22PAb4CA+749rf+cqikwS0QWicgkt6zVfw4PV9juKNdKhGoHbO3jfus7p0MtbzEikgS8BtyiqiUNNM+2mnNTVT8wWERSgddx7pJYXyyHGn+oH3ZhPS8RORcoVNVFIjKyuriBOI74c9rPcFUtEJEOwPsisqaBdVvN5/BwHe01iHyge9D7bkBBhGI5VNvcqivuc6FbXt85NVTeLUR5ixCRaJzk8KKq/tctbhPnBqCqu4GPcdqqU0Wk+kdZcCw18bvL2+E0KR7q+YbTcOA8EcnDaf45E6dG0ZrPqYaqFrjPhTgJfSht6HPYZJHuBInkA6cG9Q1OZ1l1x1j/SMdVT6xZ1O2kfoS6HWh/dF+fQ90OtPlueTrwLU7nWZr7Ot1dtsBdt7oDbXwLnZPgtMc+tl95qz43IBNIdV/HA58C5wKvULdD9wb39Y3U7dB92X3dn7odut/gdOZG9HMLjKS2k7rVnxOQCCQHvf4cGNvaP4fN8reJdACRfuCMSFiL00Z8Z6TjqSfGacBWoArn18iPcdpzPwTWuc/VH0QB/uaez3IgN2g/1+J0Cq4HrgkqzwVWuNv8FfcK+xY4r9NwqtrLgCXuY3xrPzdgIPCVe14rgHvc8l44o1nWu1+ssW55nPt+vbu8V9C+7nRj/5qgkS+R/NxSN0G0+nNyz2Gp+1hZfezW/jlsjodNtWGMMSako70PwhhjTD0sQRhjjAnJEoQxxpiQLEEYY4wJyRKEMcaYkCxBmFZFRPzujJtLRWSxiJx6kPVTReSGRuz3YxFpszefbwoReU5EJkY6DhM5liBMa1OmqoNVdRDwW+Chg6yfijOz6BEp6CpkY444liBMa5YC7AJnPicR+dCtVSwXkeqZQCcDx7i1jkfcdX/jrrNURCYH7e8H4tzHYa2IjHDX9YrIIyKywJ37/3/c8s4iMsfd74rq9YO59xh42N3nfBE51i1/TkQeFZHZwMPufQfecPf/pYgMDDqnqW6sy0TkIrf8LBH5wj3XV9y5rBCRySKyyl33T27ZD9z4lorInIOck4jIX919vEvt5HTmKGW/XkxrE+/OkhqHcz+JM93ycuACdSb7ywC+FJG3cKZIGKCqgwFEZBzOVMsnq2qpiKQH7TtKVYeKyHjgXmAMzlXrxap6kojEAp+JyCzgQmCmqj4gIl4goZ54S9x9Xokzd9G5bvlxwBhV9YvIk8BXqnq+iJyJM/3IYOBu99gnuLGnued2l7vtPhG5DbhVRP4KXAAcr6rqThIIcA9wtqpuCSqr75yGAH2AE4COwCrg2Ub9q5g2yRKEaW3Kgr7shwHPi8gAnOkPHhSR03Gmo+6K8yW3vzHAVFUtBVDV4PtsVE8WuAhn7iuAs4CBQW3x7YDeOHPrPOtONviGqi6pJ95pQc9/CSp/RZ0ZX8GZcuQiN56PRKS9iLRzY72kegNV3eXOqtoP50sdnHmLvgBKcJLkP9xf/++4m30GPCciLwedX33ndDowzY2rQEQ+queczFHCEoRptVT1C/cXdSbOPD6ZwImqWuXOOhoXYjOh/qmWK9xnP7X/NwS4WVVnHrAjJxmdA/xLRB5R1edDhVnP6337xRRqu1CxCs5NaS4NEc9QYDROUrkJOFNVfyoiJ7txLhGRwfWdk1tzsrl3TA3rgzCtlogcjzMTaBHOr+BCNzmMAnq6q+3BuZ1ptVnAtSKS4O4juIkplJnA9W5NARE5TkQSRaSne7y/A8/g3BI2lB8GPX9RzzpzgMvc/Y8EdqhqiRvrTUHnmwZ8CQwP6s9IcGNKAtqp6nTgFpwmKkTkGFWdp6r3ADtwpqMOeU5uHJe4fRSdgVEH+duYNs5qEKa1qe6DAOeX8FVuO/6LwNvi3HB+CbAGQFWLROQzEVkBzFDVX7u/oheKSCUwHbijgeP9A6e5abE4bTrbcfowRgK/FpEqYC9wZT3bx4rIPJwfYwf86nfdB0wVkWVAKXCVW/4H4G9u7H7gd6r6XxG5Gpjm9h+A0yexB3hTROLcv8sv3GWPiEhvt+xDnBlLl9VzTq/j9Oksx5lV9ZMG/i7mKGCzuRoTJm4zV66q7oh0LMY0hTUxGWOMCclqEMYYY0KyGoQxxpiQLEEYY4wJyRKEMcaYkCxBGGOMCckShDHGmJD+H0hznO2aIG1CAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "learn.recorder.plot_losses()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x576 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "learn.recorder.plot_metrics()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[[tensor(0.4210), tensor(0.8811)],\n",
       " [tensor(0.5045), tensor(0.9160)],\n",
       " [tensor(0.6042), tensor(0.9438)],\n",
       " [tensor(0.6467), tensor(0.9483)],\n",
       " [tensor(0.6666), tensor(0.9516)],\n",
       " [tensor(0.7282), tensor(0.9649)],\n",
       " [tensor(0.7582), tensor(0.9723)],\n",
       " [tensor(0.7518), tensor(0.9705)],\n",
       " [tensor(0.7753), tensor(0.9730)],\n",
       " [tensor(0.7999), tensor(0.9761)],\n",
       " [tensor(0.8096), tensor(0.9786)],\n",
       " [tensor(0.8188), tensor(0.9796)],\n",
       " [tensor(0.8091), tensor(0.9784)],\n",
       " [tensor(0.8297), tensor(0.9842)],\n",
       " [tensor(0.8333), tensor(0.9804)],\n",
       " [tensor(0.8239), tensor(0.9796)],\n",
       " [tensor(0.8343), tensor(0.9791)],\n",
       " [tensor(0.8348), tensor(0.9850)],\n",
       " [tensor(0.8437), tensor(0.9850)],\n",
       " [tensor(0.8475), tensor(0.9840)],\n",
       " [tensor(0.8427), tensor(0.9842)],\n",
       " [tensor(0.8425), tensor(0.9835)],\n",
       " [tensor(0.8419), tensor(0.9857)],\n",
       " [tensor(0.8503), tensor(0.9847)],\n",
       " [tensor(0.8554), tensor(0.9868)],\n",
       " [tensor(0.8598), tensor(0.9827)],\n",
       " [tensor(0.8570), tensor(0.9847)],\n",
       " [tensor(0.8577), tensor(0.9819)],\n",
       " [tensor(0.8590), tensor(0.9822)],\n",
       " [tensor(0.8509), tensor(0.9814)],\n",
       " [tensor(0.8638), tensor(0.9835)],\n",
       " [tensor(0.8636), tensor(0.9827)],\n",
       " [tensor(0.8659), tensor(0.9822)],\n",
       " [tensor(0.8717), tensor(0.9824)],\n",
       " [tensor(0.8509), tensor(0.9766)],\n",
       " [tensor(0.8727), tensor(0.9822)],\n",
       " [tensor(0.8608), tensor(0.9827)],\n",
       " [tensor(0.8575), tensor(0.9809)],\n",
       " [tensor(0.8659), tensor(0.9822)],\n",
       " [tensor(0.8628), tensor(0.9807)],\n",
       " [tensor(0.8659), tensor(0.9829)],\n",
       " [tensor(0.8613), tensor(0.9789)],\n",
       " [tensor(0.8689), tensor(0.9827)],\n",
       " [tensor(0.8669), tensor(0.9809)],\n",
       " [tensor(0.8646), tensor(0.9807)],\n",
       " [tensor(0.8605), tensor(0.9781)],\n",
       " [tensor(0.8671), tensor(0.9817)],\n",
       " [tensor(0.8725), tensor(0.9842)],\n",
       " [tensor(0.8664), tensor(0.9801)],\n",
       " [tensor(0.8684), tensor(0.9822)],\n",
       " [tensor(0.8659), tensor(0.9786)],\n",
       " [tensor(0.8702), tensor(0.9789)],\n",
       " [tensor(0.8649), tensor(0.9827)],\n",
       " [tensor(0.8710), tensor(0.9804)],\n",
       " [tensor(0.8687), tensor(0.9819)],\n",
       " [tensor(0.8671), tensor(0.9784)],\n",
       " [tensor(0.8727), tensor(0.9771)],\n",
       " [tensor(0.8666), tensor(0.9824)],\n",
       " [tensor(0.8710), tensor(0.9786)],\n",
       " [tensor(0.8621), tensor(0.9837)],\n",
       " [tensor(0.8755), tensor(0.9809)],\n",
       " [tensor(0.8722), tensor(0.9799)],\n",
       " [tensor(0.8656), tensor(0.9789)],\n",
       " [tensor(0.8725), tensor(0.9776)],\n",
       " [tensor(0.8699), tensor(0.9794)],\n",
       " [tensor(0.8710), tensor(0.9835)],\n",
       " [tensor(0.8755), tensor(0.9837)],\n",
       " [tensor(0.8722), tensor(0.9794)],\n",
       " [tensor(0.8748), tensor(0.9796)],\n",
       " [tensor(0.8834), tensor(0.9819)],\n",
       " [tensor(0.8776), tensor(0.9824)],\n",
       " [tensor(0.8788), tensor(0.9796)],\n",
       " [tensor(0.8796), tensor(0.9827)],\n",
       " [tensor(0.8760), tensor(0.9799)],\n",
       " [tensor(0.8733), tensor(0.9791)],\n",
       " [tensor(0.8768), tensor(0.9801)],\n",
       " [tensor(0.8781), tensor(0.9771)],\n",
       " [tensor(0.8735), tensor(0.9781)],\n",
       " [tensor(0.8753), tensor(0.9829)],\n",
       " [tensor(0.8730), tensor(0.9809)],\n",
       " [tensor(0.8763), tensor(0.9809)],\n",
       " [tensor(0.8766), tensor(0.9779)],\n",
       " [tensor(0.8834), tensor(0.9791)],\n",
       " [tensor(0.8783), tensor(0.9845)],\n",
       " [tensor(0.8692), tensor(0.9824)],\n",
       " [tensor(0.8796), tensor(0.9801)],\n",
       " [tensor(0.8781), tensor(0.9817)],\n",
       " [tensor(0.8768), tensor(0.9776)],\n",
       " [tensor(0.8771), tensor(0.9784)],\n",
       " [tensor(0.8730), tensor(0.9799)],\n",
       " [tensor(0.8794), tensor(0.9791)],\n",
       " [tensor(0.8850), tensor(0.9776)],\n",
       " [tensor(0.8811), tensor(0.9807)],\n",
       " [tensor(0.8788), tensor(0.9814)],\n",
       " [tensor(0.8768), tensor(0.9796)],\n",
       " [tensor(0.8760), tensor(0.9799)],\n",
       " [tensor(0.8837), tensor(0.9824)],\n",
       " [tensor(0.8796), tensor(0.9809)],\n",
       " [tensor(0.8893), tensor(0.9773)],\n",
       " [tensor(0.8755), tensor(0.9817)],\n",
       " [tensor(0.8822), tensor(0.9799)],\n",
       " [tensor(0.8819), tensor(0.9807)],\n",
       " [tensor(0.8811), tensor(0.9779)],\n",
       " [tensor(0.8824), tensor(0.9776)],\n",
       " [tensor(0.8783), tensor(0.9791)],\n",
       " [tensor(0.8834), tensor(0.9796)],\n",
       " [tensor(0.8824), tensor(0.9809)],\n",
       " [tensor(0.8832), tensor(0.9794)],\n",
       " [tensor(0.8781), tensor(0.9827)],\n",
       " [tensor(0.8766), tensor(0.9809)],\n",
       " [tensor(0.8827), tensor(0.9817)],\n",
       " [tensor(0.8880), tensor(0.9807)],\n",
       " [tensor(0.8832), tensor(0.9807)],\n",
       " [tensor(0.8852), tensor(0.9842)],\n",
       " [tensor(0.8804), tensor(0.9829)],\n",
       " [tensor(0.8857), tensor(0.9819)],\n",
       " [tensor(0.8890), tensor(0.9794)],\n",
       " [tensor(0.8837), tensor(0.9799)],\n",
       " [tensor(0.8788), tensor(0.9751)],\n",
       " [tensor(0.8903), tensor(0.9768)],\n",
       " [tensor(0.8794), tensor(0.9789)],\n",
       " [tensor(0.8855), tensor(0.9817)],\n",
       " [tensor(0.8878), tensor(0.9796)],\n",
       " [tensor(0.8814), tensor(0.9804)],\n",
       " [tensor(0.8926), tensor(0.9794)],\n",
       " [tensor(0.8829), tensor(0.9804)],\n",
       " [tensor(0.8847), tensor(0.9776)],\n",
       " [tensor(0.8883), tensor(0.9789)],\n",
       " [tensor(0.8867), tensor(0.9804)],\n",
       " [tensor(0.8844), tensor(0.9799)],\n",
       " [tensor(0.8801), tensor(0.9804)],\n",
       " [tensor(0.8850), tensor(0.9835)],\n",
       " [tensor(0.8911), tensor(0.9847)],\n",
       " [tensor(0.8872), tensor(0.9794)],\n",
       " [tensor(0.8842), tensor(0.9794)],\n",
       " [tensor(0.8855), tensor(0.9812)],\n",
       " [tensor(0.8903), tensor(0.9822)],\n",
       " [tensor(0.8837), tensor(0.9817)],\n",
       " [tensor(0.8860), tensor(0.9827)],\n",
       " [tensor(0.8895), tensor(0.9827)],\n",
       " [tensor(0.8880), tensor(0.9807)],\n",
       " [tensor(0.8906), tensor(0.9827)],\n",
       " [tensor(0.8867), tensor(0.9829)],\n",
       " [tensor(0.8926), tensor(0.9817)],\n",
       " [tensor(0.8898), tensor(0.9837)],\n",
       " [tensor(0.8918), tensor(0.9791)],\n",
       " [tensor(0.8878), tensor(0.9822)],\n",
       " [tensor(0.8893), tensor(0.9822)],\n",
       " [tensor(0.8954), tensor(0.9840)],\n",
       " [tensor(0.8928), tensor(0.9801)],\n",
       " [tensor(0.8964), tensor(0.9801)],\n",
       " [tensor(0.8921), tensor(0.9812)],\n",
       " [tensor(0.8941), tensor(0.9801)],\n",
       " [tensor(0.8934), tensor(0.9819)],\n",
       " [tensor(0.8946), tensor(0.9801)],\n",
       " [tensor(0.8959), tensor(0.9807)],\n",
       " [tensor(0.8959), tensor(0.9817)],\n",
       " [tensor(0.8962), tensor(0.9819)],\n",
       " [tensor(0.8951), tensor(0.9819)],\n",
       " [tensor(0.8949), tensor(0.9809)],\n",
       " [tensor(0.8946), tensor(0.9822)],\n",
       " [tensor(0.8949), tensor(0.9814)],\n",
       " [tensor(0.8939), tensor(0.9832)],\n",
       " [tensor(0.8951), tensor(0.9814)],\n",
       " [tensor(0.8949), tensor(0.9829)],\n",
       " [tensor(0.8954), tensor(0.9817)],\n",
       " [tensor(0.8992), tensor(0.9801)],\n",
       " [tensor(0.9000), tensor(0.9819)],\n",
       " [tensor(0.8977), tensor(0.9819)],\n",
       " [tensor(0.8972), tensor(0.9817)],\n",
       " [tensor(0.8931), tensor(0.9822)],\n",
       " [tensor(0.8954), tensor(0.9804)],\n",
       " [tensor(0.8977), tensor(0.9819)],\n",
       " [tensor(0.8974), tensor(0.9827)],\n",
       " [tensor(0.8972), tensor(0.9812)],\n",
       " [tensor(0.8982), tensor(0.9814)],\n",
       " [tensor(0.8982), tensor(0.9824)],\n",
       " [tensor(0.8979), tensor(0.9804)],\n",
       " [tensor(0.8979), tensor(0.9819)],\n",
       " [tensor(0.8995), tensor(0.9832)],\n",
       " [tensor(0.9018), tensor(0.9812)],\n",
       " [tensor(0.8992), tensor(0.9819)],\n",
       " [tensor(0.9010), tensor(0.9807)],\n",
       " [tensor(0.9007), tensor(0.9819)],\n",
       " [tensor(0.9007), tensor(0.9822)],\n",
       " [tensor(0.9000), tensor(0.9827)],\n",
       " [tensor(0.9010), tensor(0.9819)],\n",
       " [tensor(0.9010), tensor(0.9827)],\n",
       " [tensor(0.9007), tensor(0.9814)],\n",
       " [tensor(0.9010), tensor(0.9809)],\n",
       " [tensor(0.9010), tensor(0.9829)],\n",
       " [tensor(0.9012), tensor(0.9819)],\n",
       " [tensor(0.9018), tensor(0.9822)],\n",
       " [tensor(0.8992), tensor(0.9804)],\n",
       " [tensor(0.9002), tensor(0.9822)],\n",
       " [tensor(0.8995), tensor(0.9822)],\n",
       " [tensor(0.9012), tensor(0.9799)],\n",
       " [tensor(0.9007), tensor(0.9812)],\n",
       " [tensor(0.8987), tensor(0.9822)],\n",
       " [tensor(0.9007), tensor(0.9837)]]"
      ]
     },
     "execution_count": null,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "learn.recorder.metrics"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "res = ''\n",
    "for num, i in enumerate(learn.recorder.metrics):\n",
    "    res += f\"{num}, {i[0].item()}, {i[1].item()} \\n\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "with open('log_s192_e200_1.txt','w') as f:\n",
    "        f.writelines(res)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "data path   /notebooks/data/imagewoof2\n",
      "Learn path /notebooks/data/imagewoof2\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "\n",
       "    <div>\n",
       "        <style>\n",
       "            /* Turns off some styling */\n",
       "            progress {\n",
       "                /* gets rid of default border in Firefox and Opera. */\n",
       "                border: none;\n",
       "                /* Needs to be in here for Safari polyfill so background images work as expected. */\n",
       "                background-size: auto;\n",
       "            }\n",
       "            .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n",
       "                background: #F44336;\n",
       "            }\n",
       "        </style>\n",
       "      <progress value='87' class='' max='200', style='width:300px; height:20px; vertical-align: middle;'></progress>\n",
       "      43.50% [87/200 2:29:56<3:14:45]\n",
       "    </div>\n",
       "    \n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: left;\">\n",
       "      <th>epoch</th>\n",
       "      <th>train_loss</th>\n",
       "      <th>valid_loss</th>\n",
       "      <th>accuracy</th>\n",
       "      <th>top_k_accuracy</th>\n",
       "      <th>time</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>0</td>\n",
       "      <td>2.018552</td>\n",
       "      <td>1.775881</td>\n",
       "      <td>0.433698</td>\n",
       "      <td>0.889030</td>\n",
       "      <td>01:41</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>1</td>\n",
       "      <td>1.832076</td>\n",
       "      <td>1.541513</td>\n",
       "      <td>0.549758</td>\n",
       "      <td>0.928226</td>\n",
       "      <td>01:42</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>2</td>\n",
       "      <td>1.704541</td>\n",
       "      <td>1.455418</td>\n",
       "      <td>0.594299</td>\n",
       "      <td>0.938661</td>\n",
       "      <td>01:42</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>3</td>\n",
       "      <td>1.594044</td>\n",
       "      <td>1.300967</td>\n",
       "      <td>0.658692</td>\n",
       "      <td>0.958768</td>\n",
       "      <td>01:42</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>4</td>\n",
       "      <td>1.510492</td>\n",
       "      <td>1.201198</td>\n",
       "      <td>0.723085</td>\n",
       "      <td>0.963858</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>5</td>\n",
       "      <td>1.427097</td>\n",
       "      <td>1.168778</td>\n",
       "      <td>0.737592</td>\n",
       "      <td>0.963604</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>6</td>\n",
       "      <td>1.398530</td>\n",
       "      <td>1.091903</td>\n",
       "      <td>0.768389</td>\n",
       "      <td>0.972003</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>7</td>\n",
       "      <td>1.353940</td>\n",
       "      <td>1.155981</td>\n",
       "      <td>0.733265</td>\n",
       "      <td>0.960804</td>\n",
       "      <td>01:44</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>8</td>\n",
       "      <td>1.326439</td>\n",
       "      <td>1.018783</td>\n",
       "      <td>0.797658</td>\n",
       "      <td>0.977348</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>9</td>\n",
       "      <td>1.262766</td>\n",
       "      <td>1.028362</td>\n",
       "      <td>0.786205</td>\n",
       "      <td>0.975821</td>\n",
       "      <td>01:42</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>10</td>\n",
       "      <td>1.226803</td>\n",
       "      <td>0.971345</td>\n",
       "      <td>0.813693</td>\n",
       "      <td>0.976075</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>11</td>\n",
       "      <td>1.232341</td>\n",
       "      <td>0.957101</td>\n",
       "      <td>0.823365</td>\n",
       "      <td>0.978366</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>12</td>\n",
       "      <td>1.220500</td>\n",
       "      <td>0.977905</td>\n",
       "      <td>0.809875</td>\n",
       "      <td>0.976839</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>13</td>\n",
       "      <td>1.186123</td>\n",
       "      <td>0.937302</td>\n",
       "      <td>0.832527</td>\n",
       "      <td>0.980402</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>14</td>\n",
       "      <td>1.166945</td>\n",
       "      <td>0.943983</td>\n",
       "      <td>0.827946</td>\n",
       "      <td>0.979639</td>\n",
       "      <td>01:44</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>15</td>\n",
       "      <td>1.142363</td>\n",
       "      <td>0.959264</td>\n",
       "      <td>0.822092</td>\n",
       "      <td>0.978112</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>16</td>\n",
       "      <td>1.138346</td>\n",
       "      <td>0.907916</td>\n",
       "      <td>0.844999</td>\n",
       "      <td>0.983711</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>17</td>\n",
       "      <td>1.131900</td>\n",
       "      <td>0.910402</td>\n",
       "      <td>0.843472</td>\n",
       "      <td>0.983711</td>\n",
       "      <td>01:44</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>18</td>\n",
       "      <td>1.107854</td>\n",
       "      <td>0.921640</td>\n",
       "      <td>0.834309</td>\n",
       "      <td>0.977857</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>19</td>\n",
       "      <td>1.119720</td>\n",
       "      <td>0.884629</td>\n",
       "      <td>0.848053</td>\n",
       "      <td>0.982184</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>20</td>\n",
       "      <td>1.095973</td>\n",
       "      <td>0.877906</td>\n",
       "      <td>0.852889</td>\n",
       "      <td>0.982184</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>21</td>\n",
       "      <td>1.056569</td>\n",
       "      <td>0.888758</td>\n",
       "      <td>0.847544</td>\n",
       "      <td>0.984983</td>\n",
       "      <td>01:44</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>22</td>\n",
       "      <td>1.067366</td>\n",
       "      <td>0.896801</td>\n",
       "      <td>0.848817</td>\n",
       "      <td>0.982438</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>23</td>\n",
       "      <td>1.045568</td>\n",
       "      <td>0.898602</td>\n",
       "      <td>0.847289</td>\n",
       "      <td>0.984983</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>24</td>\n",
       "      <td>1.038008</td>\n",
       "      <td>0.861533</td>\n",
       "      <td>0.863069</td>\n",
       "      <td>0.982438</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>25</td>\n",
       "      <td>1.022779</td>\n",
       "      <td>0.872442</td>\n",
       "      <td>0.861033</td>\n",
       "      <td>0.981675</td>\n",
       "      <td>01:44</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>26</td>\n",
       "      <td>1.018630</td>\n",
       "      <td>0.882299</td>\n",
       "      <td>0.858234</td>\n",
       "      <td>0.982184</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>27</td>\n",
       "      <td>1.020969</td>\n",
       "      <td>0.849777</td>\n",
       "      <td>0.861797</td>\n",
       "      <td>0.985747</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>28</td>\n",
       "      <td>1.016671</td>\n",
       "      <td>0.872980</td>\n",
       "      <td>0.854416</td>\n",
       "      <td>0.982693</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>29</td>\n",
       "      <td>1.004605</td>\n",
       "      <td>0.849925</td>\n",
       "      <td>0.866633</td>\n",
       "      <td>0.984474</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>30</td>\n",
       "      <td>0.985667</td>\n",
       "      <td>0.851065</td>\n",
       "      <td>0.863833</td>\n",
       "      <td>0.981675</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>31</td>\n",
       "      <td>0.974133</td>\n",
       "      <td>0.863882</td>\n",
       "      <td>0.860779</td>\n",
       "      <td>0.982438</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>32</td>\n",
       "      <td>0.967832</td>\n",
       "      <td>0.844864</td>\n",
       "      <td>0.862306</td>\n",
       "      <td>0.984983</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>33</td>\n",
       "      <td>0.979521</td>\n",
       "      <td>0.845886</td>\n",
       "      <td>0.866124</td>\n",
       "      <td>0.983456</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>34</td>\n",
       "      <td>0.949951</td>\n",
       "      <td>0.878165</td>\n",
       "      <td>0.863069</td>\n",
       "      <td>0.981929</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>35</td>\n",
       "      <td>0.961552</td>\n",
       "      <td>0.870588</td>\n",
       "      <td>0.856197</td>\n",
       "      <td>0.981166</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>36</td>\n",
       "      <td>0.958462</td>\n",
       "      <td>0.856214</td>\n",
       "      <td>0.860524</td>\n",
       "      <td>0.982184</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>37</td>\n",
       "      <td>0.950901</td>\n",
       "      <td>0.867622</td>\n",
       "      <td>0.856707</td>\n",
       "      <td>0.984220</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>38</td>\n",
       "      <td>0.944004</td>\n",
       "      <td>0.860119</td>\n",
       "      <td>0.862051</td>\n",
       "      <td>0.981675</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>39</td>\n",
       "      <td>0.928675</td>\n",
       "      <td>0.833913</td>\n",
       "      <td>0.872232</td>\n",
       "      <td>0.982693</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>40</td>\n",
       "      <td>0.936728</td>\n",
       "      <td>0.825081</td>\n",
       "      <td>0.879359</td>\n",
       "      <td>0.982947</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>41</td>\n",
       "      <td>0.925024</td>\n",
       "      <td>0.854302</td>\n",
       "      <td>0.867396</td>\n",
       "      <td>0.979893</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>42</td>\n",
       "      <td>0.926801</td>\n",
       "      <td>0.829419</td>\n",
       "      <td>0.871978</td>\n",
       "      <td>0.984983</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>43</td>\n",
       "      <td>0.899561</td>\n",
       "      <td>0.844982</td>\n",
       "      <td>0.868160</td>\n",
       "      <td>0.981675</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>44</td>\n",
       "      <td>0.946837</td>\n",
       "      <td>0.832632</td>\n",
       "      <td>0.869941</td>\n",
       "      <td>0.981929</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>45</td>\n",
       "      <td>0.905297</td>\n",
       "      <td>0.837314</td>\n",
       "      <td>0.869687</td>\n",
       "      <td>0.980402</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>46</td>\n",
       "      <td>0.905443</td>\n",
       "      <td>0.838738</td>\n",
       "      <td>0.872741</td>\n",
       "      <td>0.982947</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>47</td>\n",
       "      <td>0.930484</td>\n",
       "      <td>0.850172</td>\n",
       "      <td>0.866124</td>\n",
       "      <td>0.978366</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>48</td>\n",
       "      <td>0.897669</td>\n",
       "      <td>0.836428</td>\n",
       "      <td>0.875795</td>\n",
       "      <td>0.981166</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>49</td>\n",
       "      <td>0.911610</td>\n",
       "      <td>0.845268</td>\n",
       "      <td>0.869178</td>\n",
       "      <td>0.980911</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>50</td>\n",
       "      <td>0.898268</td>\n",
       "      <td>0.858949</td>\n",
       "      <td>0.865615</td>\n",
       "      <td>0.979384</td>\n",
       "      <td>01:44</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>51</td>\n",
       "      <td>0.922095</td>\n",
       "      <td>0.846666</td>\n",
       "      <td>0.869432</td>\n",
       "      <td>0.978875</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>52</td>\n",
       "      <td>0.911658</td>\n",
       "      <td>0.859360</td>\n",
       "      <td>0.862051</td>\n",
       "      <td>0.984983</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>53</td>\n",
       "      <td>0.902464</td>\n",
       "      <td>0.829484</td>\n",
       "      <td>0.873759</td>\n",
       "      <td>0.981929</td>\n",
       "      <td>01:42</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>54</td>\n",
       "      <td>0.887245</td>\n",
       "      <td>0.858084</td>\n",
       "      <td>0.860270</td>\n",
       "      <td>0.978366</td>\n",
       "      <td>01:42</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>55</td>\n",
       "      <td>0.887569</td>\n",
       "      <td>0.861800</td>\n",
       "      <td>0.860270</td>\n",
       "      <td>0.978366</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>56</td>\n",
       "      <td>0.890479</td>\n",
       "      <td>0.849488</td>\n",
       "      <td>0.870450</td>\n",
       "      <td>0.979639</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>57</td>\n",
       "      <td>0.892428</td>\n",
       "      <td>0.827074</td>\n",
       "      <td>0.876559</td>\n",
       "      <td>0.982438</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>58</td>\n",
       "      <td>0.897924</td>\n",
       "      <td>0.834669</td>\n",
       "      <td>0.868414</td>\n",
       "      <td>0.981675</td>\n",
       "      <td>01:44</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>59</td>\n",
       "      <td>0.877270</td>\n",
       "      <td>0.830444</td>\n",
       "      <td>0.870705</td>\n",
       "      <td>0.982947</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>60</td>\n",
       "      <td>0.886027</td>\n",
       "      <td>0.850059</td>\n",
       "      <td>0.864851</td>\n",
       "      <td>0.980402</td>\n",
       "      <td>01:42</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>61</td>\n",
       "      <td>0.894075</td>\n",
       "      <td>0.846634</td>\n",
       "      <td>0.862306</td>\n",
       "      <td>0.983965</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>62</td>\n",
       "      <td>0.864332</td>\n",
       "      <td>0.840592</td>\n",
       "      <td>0.869941</td>\n",
       "      <td>0.979639</td>\n",
       "      <td>01:42</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>63</td>\n",
       "      <td>0.880233</td>\n",
       "      <td>0.844732</td>\n",
       "      <td>0.870705</td>\n",
       "      <td>0.979130</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>64</td>\n",
       "      <td>0.884165</td>\n",
       "      <td>0.838863</td>\n",
       "      <td>0.872232</td>\n",
       "      <td>0.982184</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>65</td>\n",
       "      <td>0.874181</td>\n",
       "      <td>0.830642</td>\n",
       "      <td>0.879359</td>\n",
       "      <td>0.978112</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>66</td>\n",
       "      <td>0.871054</td>\n",
       "      <td>0.832841</td>\n",
       "      <td>0.874014</td>\n",
       "      <td>0.982184</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>67</td>\n",
       "      <td>0.872201</td>\n",
       "      <td>0.842817</td>\n",
       "      <td>0.867651</td>\n",
       "      <td>0.982184</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>68</td>\n",
       "      <td>0.872120</td>\n",
       "      <td>0.826015</td>\n",
       "      <td>0.874268</td>\n",
       "      <td>0.982184</td>\n",
       "      <td>01:44</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>69</td>\n",
       "      <td>0.853469</td>\n",
       "      <td>0.815377</td>\n",
       "      <td>0.881140</td>\n",
       "      <td>0.981929</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>70</td>\n",
       "      <td>0.874644</td>\n",
       "      <td>0.839216</td>\n",
       "      <td>0.875795</td>\n",
       "      <td>0.981420</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>71</td>\n",
       "      <td>0.861840</td>\n",
       "      <td>0.841722</td>\n",
       "      <td>0.868414</td>\n",
       "      <td>0.982693</td>\n",
       "      <td>01:44</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>72</td>\n",
       "      <td>0.868485</td>\n",
       "      <td>0.821695</td>\n",
       "      <td>0.871723</td>\n",
       "      <td>0.983965</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>73</td>\n",
       "      <td>0.868154</td>\n",
       "      <td>0.832092</td>\n",
       "      <td>0.881140</td>\n",
       "      <td>0.977857</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>74</td>\n",
       "      <td>0.856190</td>\n",
       "      <td>0.846837</td>\n",
       "      <td>0.868923</td>\n",
       "      <td>0.976075</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>75</td>\n",
       "      <td>0.862799</td>\n",
       "      <td>0.826734</td>\n",
       "      <td>0.878086</td>\n",
       "      <td>0.975312</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>76</td>\n",
       "      <td>0.873981</td>\n",
       "      <td>0.828516</td>\n",
       "      <td>0.871469</td>\n",
       "      <td>0.982693</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>77</td>\n",
       "      <td>0.860693</td>\n",
       "      <td>0.829391</td>\n",
       "      <td>0.874523</td>\n",
       "      <td>0.980148</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>78</td>\n",
       "      <td>0.870487</td>\n",
       "      <td>0.829360</td>\n",
       "      <td>0.875032</td>\n",
       "      <td>0.982693</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>79</td>\n",
       "      <td>0.856388</td>\n",
       "      <td>0.824793</td>\n",
       "      <td>0.877322</td>\n",
       "      <td>0.979384</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>80</td>\n",
       "      <td>0.854575</td>\n",
       "      <td>0.831106</td>\n",
       "      <td>0.876050</td>\n",
       "      <td>0.979893</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>81</td>\n",
       "      <td>0.849676</td>\n",
       "      <td>0.833044</td>\n",
       "      <td>0.872741</td>\n",
       "      <td>0.983202</td>\n",
       "      <td>01:44</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>82</td>\n",
       "      <td>0.850200</td>\n",
       "      <td>0.821462</td>\n",
       "      <td>0.876304</td>\n",
       "      <td>0.981675</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>83</td>\n",
       "      <td>0.843354</td>\n",
       "      <td>0.827991</td>\n",
       "      <td>0.878850</td>\n",
       "      <td>0.978621</td>\n",
       "      <td>01:42</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>84</td>\n",
       "      <td>0.858193</td>\n",
       "      <td>0.816400</td>\n",
       "      <td>0.882413</td>\n",
       "      <td>0.979130</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>85</td>\n",
       "      <td>0.838305</td>\n",
       "      <td>0.832594</td>\n",
       "      <td>0.875032</td>\n",
       "      <td>0.982693</td>\n",
       "      <td>01:43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>86</td>\n",
       "      <td>0.840945</td>\n",
       "      <td>0.834712</td>\n",
       "      <td>0.873505</td>\n",
       "      <td>0.978112</td>\n",
       "      <td>01:42</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table><p>\n",
       "\n",
       "    <div>\n",
       "        <style>\n",
       "            /* Turns off some styling */\n",
       "            progress {\n",
       "                /* gets rid of default border in Firefox and Opera. */\n",
       "                border: none;\n",
       "                /* Needs to be in here for Safari polyfill so background images work as expected. */\n",
       "                background-size: auto;\n",
       "            }\n",
       "            .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n",
       "                background: #F44336;\n",
       "            }\n",
       "        </style>\n",
       "      <progress value='197' class='' max='282', style='width:300px; height:20px; vertical-align: middle;'></progress>\n",
       "      69.86% [197/282 01:01<00:26 0.8308]\n",
       "    </div>\n",
       "    "
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "IOPub message rate exceeded.\n",
      "The notebook server will temporarily stop sending output\n",
      "to the client in order to avoid crashing it.\n",
      "To change this limit, set the config variable\n",
      "`--NotebookApp.iopub_msg_rate_limit`.\n",
      "\n",
      "Current values:\n",
      "NotebookApp.iopub_msg_rate_limit=1000.0 (msgs/sec)\n",
      "NotebookApp.rate_limit_window=3.0 (secs)\n",
      "\n",
      "IOPub message rate exceeded.\n",
      "The notebook server will temporarily stop sending output\n",
      "to the client in order to avoid crashing it.\n",
      "To change this limit, set the config variable\n",
      "`--NotebookApp.iopub_msg_rate_limit`.\n",
      "\n",
      "Current values:\n",
      "NotebookApp.iopub_msg_rate_limit=1000.0 (msgs/sec)\n",
      "NotebookApp.rate_limit_window=3.0 (secs)\n",
      "\n",
      "IOPub message rate exceeded.\n",
      "The notebook server will temporarily stop sending output\n",
      "to the client in order to avoid crashing it.\n",
      "To change this limit, set the config variable\n",
      "`--NotebookApp.iopub_msg_rate_limit`.\n",
      "\n",
      "Current values:\n",
      "NotebookApp.iopub_msg_rate_limit=1000.0 (msgs/sec)\n",
      "NotebookApp.rate_limit_window=3.0 (secs)\n",
      "\n",
      "IOPub message rate exceeded.\n",
      "The notebook server will temporarily stop sending output\n",
      "to the client in order to avoid crashing it.\n",
      "To change this limit, set the config variable\n",
      "`--NotebookApp.iopub_msg_rate_limit`.\n",
      "\n",
      "Current values:\n",
      "NotebookApp.iopub_msg_rate_limit=1000.0 (msgs/sec)\n",
      "NotebookApp.rate_limit_window=3.0 (secs)\n",
      "\n",
      "IOPub message rate exceeded.\n",
      "The notebook server will temporarily stop sending output\n",
      "to the client in order to avoid crashing it.\n",
      "To change this limit, set the config variable\n",
      "`--NotebookApp.iopub_msg_rate_limit`.\n",
      "\n",
      "Current values:\n",
      "NotebookApp.iopub_msg_rate_limit=1000.0 (msgs/sec)\n",
      "NotebookApp.rate_limit_window=3.0 (secs)\n",
      "\n"
     ]
    }
   ],
   "source": [
    "learn = get_learn(model=model,size=size,bs=bs,mixup=mixup)\n",
    "learn.fit_fc(epochs, lr, moms,start_pct)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "learn.recorder.plot_losses()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x576 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "learn.recorder.plot_metrics()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "res = ''\n",
    "for num, i in enumerate(learn.recorder.metrics):\n",
    "    res += f\"{num}, {i[0].item()}, {i[1].item()} \\n\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "with open('log_s192_e200_2.txt','w') as f:\n",
    "        f.writelines(res)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "loss = ''\n",
    "for num, i in enumerate(learn.recorder.losses):\n",
    "    loss += f\"{num}, {i.item()} \\n\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "with open('log_loss_s192_e200_2.txt','w') as f:\n",
    "        f.writelines(loss)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "val_loss = ''\n",
    "for num, i in enumerate(learn.recorder.val_losses):\n",
    "    val_loss += f\"{num}, {i.item()}\\n\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "with open('log_val_loss_s192_e200_2.txt','w') as f:\n",
    "        f.writelines(val_loss)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# epochs 200 results"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "acc = np.array([0.9007381200790405, 0.9063374996185303])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(0.9035378098487854, 0.002799689769744873)"
      ]
     },
     "execution_count": null,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "acc.mean(), acc.std()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
